В системе Mathematica. При использовании изображений в качестве вершин в GraphPlot, как мне предотвратить перекрытие изображений?

Я использую GraphPlot , чтобы рисовать ориентированные графы примерно со 100 вершинами. Я заменяю каждую вершину небольшим прямоугольным или квадратным изображением, определяя VertexRenderingFunction. Изображения часто накладываются друг на друга. Есть ли способ заставить Mathematica располагать вершины дальше друг от друга, чтобы предотвратить их перекрытие?

Я пробовал различные очевидные варианты для 'Method' ("SpringElectricalEmbedding", "SpringEmbedding", "HighDimensionalEmbedding", "CircularEmbedding", «Случайное вложение», «Линейное вложение»).

trans = {1 -> 1, 2 -> 1, 3 -> 1, 4 -> 1, 5 -> 1, 6 -> 1, 7 -> 1,
8 -> 1, 9 -> 1, 10 -> 1, 11 -> 1, 12 -> 1, 13 -> 1, 14 -> 1, 
15 -> 1, 16 -> 1, 17 -> 1, 18 -> 13, 19 -> 1, 20 -> 13, 21 -> 13, 
22 -> 70, 23 -> 1, 24 -> 1, 25 -> 1, 26 -> 1, 27 -> 13, 28 -> 13, 
29 -> 1, 30 -> 13, 31 -> 13, 32 -> 1, 33 -> 19, 34 -> 70, 35 -> 70,
36 -> 1, 37 -> 1, 38 -> 1, 39 -> 39, 40 -> 13, 41 -> 2, 42 -> 13, 
43 -> 1, 44 -> 2, 45 -> 1, 46 -> 52, 47 -> 2, 48 -> 68, 49 -> 49, 
50 -> 19, 51 -> 78, 52 -> 1, 53 -> 1, 54 -> 39, 55 -> 13, 56 -> 56,
57 -> 13, 58 -> 13, 59 -> 1, 60 -> 36, 61 -> 1, 62 -> 52, 63 -> 2,
6 4 -> 68, 65 -> 19, 66 -> 56, 67 -> 4, 68 -> 76, 69 -> 19, 
70 -> 78, 71 -> 1, 72 -> 39, 73 -> 52, 74 -> 56, 75 -> 23, 
76 -> 76, 77 -> 56, 78 -> 78};

image = {{1, 0, 0, 0, 0}, {0, 1, 0, 0, 0}};

GraphPlot[trans, DirectedEdges -> True, VertexLabeling -> True,
VertexRenderingFunction -> (Inset[
ArrayPlot[image, ImageSize -> 15, Mesh -> True], #1] &)]

Output

7
задан Martijn 19 January 2012 в 20:44
поделиться