Является ли Graphviz лучшим инструментом для этого типа графиков? - PullRequest
7 голосов
/ 24 сентября 2011

Я хочу создать график, подобный показанному ниже ... но слишком сложный. Я хочу использовать отдельные изображения для каждого из квадратных узлов и одно и то же изображение для каждого из узлов круга.

Я хочу знать, является ли использование GraphViz лучшим вариантом или есть другие варианты?

Кроме того, я хотел бы знать, могу ли я создать узел шаблона в GraphViz для круга и использовать его повторно? Я не хочу снова и снова указывать такие атрибуты, как изображение, форма и т. Д.

Sample Graph

Ответы [ 2 ]

12 голосов
/ 24 сентября 2011

Конечно, вот код для рисования графика в вашем Вопросе (и который показан представленным точкой внизу).

digraph g {
rankdir = TB;
bgcolor = white;

edge[arrowsize=.7, color=black];
node[shape=box, color=black]

{rank=same; a, b, c};
{rank=same; d, e, f};
{rank=same; g, h};
{rank=same; i, j, k};

d[color=blue; shape=circle];
e[color=blue; shape=circle];
k[color=blue; shape=circle];

a -> d;
b -> d;
b -> e;
c -> e;
d -> g;
e -> h;
d -> i;
d -> j;
j -> k;
h -> k;
k -> f;
}

  1. первая строка орграф предназначен для ориентированного графа (для графиков, у которых ребра имеют направление).

  2. Четвертый и пятый лежат выше установленных атрибутов по умолчанию для ребер и узлов соответственно.Другими словами, после того, как вы это сделали, вам нужно только стилировать (включать атрибуты + значения) узлы (или ребра), которые вы хотите стилизовать иначе, чем значения по умолчанию.Вы можете иметь более одного «шаблона» для узлов, создавая подграфы или узлы дискретных групп (см. Руководство по точкам).

  3. rank = same позволяет указать группу узлов, имеющих одинаковую вертикальную позицию (при условии, что rankdir имеет значение TB , что означает «сверху вниз»).

  4. По умолчанию имя узла (например, a, b, c на моем графике) используется в качестве метки узла.Если вы не хотите, чтобы это отображалось на визуализированном графике, просто установите label = ""

enter image description here

8 голосов
/ 24 сентября 2011

Graphviz определенно подходит для того, что вы просите.На данный момент основной сайт graphviz.org недоступен, но кто-то любезно отразил примеры галереи (с источником) на Flickr.

http://www.flickr.com/photos/kentbye/sets/72157601523153827/

Насколько мне известновы не можете создавать «шаблоны», но вы можете сделать что-то вроде этого для кругов:

node[shape=circle, color=white, style=solid];
node1;node2;node3;

Это определит узел (думайте о нем как о «состоянии» при оценке файла построчно -линия), а затем вы можете определить узлы окружности в этом «состоянии» перед переключением на свои прямоугольники.

В зависимости от вашей платформы, вы также можете импортировать файл .dot и настроить его для публикации.,Существует также большое количество генераторов и преобразователей для этого формата.

Обратите внимание, что если вы работаете на Mac OS X 10.7 "Lion", я не смог найти или собрать рабочую версию Graphviz.еще.В таком случае я бы сказал, что это еще не соответствует вашим потребностям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...