Является ли Graphviz лучшим инструментом для такого типа графиков?

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

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

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

Пример графика


person Rishabh    schedule 24.09.2011    source источник


Ответы (2)


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. В этом случае я бы сказал, что это еще не подходит для ваших нужд.

person Art Taylor    schedule 24.09.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. первая строка digraph предназначена для ориентированного графа (для графов, в которых ребра имеют направление).

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

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

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

введите здесь описание изображения

person doug    schedule 24.09.2011