GraphViz Node Placement и Rankdir - PullRequest
       9

GraphViz Node Placement и Rankdir

39 голосов
/ 10 сентября 2011

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

http://en.wikipedia.org/wiki/File:ICS_Structure.PNG

как можно точнее.Нижняя часть этого графика все течет сверху вниз, и у меня это работает нормально.Что я не смог сделать, так это поместить первых 3 детей прямо под «Командующий инцидентами».Они разветвляются влево и вправо.Кроме того, обратите внимание, как ребра делятся на 8 верхних узлов.Это возможно с точкой?Я могу иметь дело со всем остальным, но не с этими верхними узлами.Может кто-нибудь дать мне подсказку, чтобы решить это?

Ответы [ 2 ]

117 голосов
/ 11 сентября 2011

Два полезных метода для воспроизведения макетов графиков:

  • Невидимые узлы
  • Ранговые ограничения

Вот краткая попытка для верхних узлов:

digraph g{
ranksep=0.2;

node[shape=box3d, width=2.3, height=0.6, fontname="Arial"];
n1[label="Incident Commander"];
n2[label="Public Information\nOfficer"];
n3[label="Liaison Officer"];
n4[label="Safety Officer"];
n5[label="Operations Section"];
n6[label="Planning Section"];
n7[label="Logistics Section"];
n8[label="Finance/Admin. Section"];

node[shape=none, width=0, height=0, label=""];
edge[dir=none];
n1 -> p1 -> p2 -> p3;
{rank=same; n2 -> p1 -> n3;}
{rank=same; n4 -> p2;}
{rank=same; p4 -> p5 -> p3 -> p6 -> p7;}
p4 -> n5;
p5 -> n6;
p6 -> n7;
p7 -> n8;
}

А вот и результат:

dot layout top nodes

0 голосов
/ 10 августа 2016

Нативный рендеринг Graphviz (точка) не поддерживает стиль рендеринга органограммы, используемый в оригинале.Хотя он может генерировать ортогональные ребра (как показано), нет способа сгруппировать ребра.Вертикальное наслоение может быть достигнуто с помощью minlen.

. Принятый ответ является своего рода неправильным обозначением, но в целом разумным подходом.

poor ICS rendering

Изменения в поставляемом решении:

graph [splines=ortho]; edge [dir = none];

{ rank = same; n2; n3; }
n1 -> { n2; n3; };
n1 -> n4 [minlen = 2];
{ rank = same; n5; n6; n7; n8; };
n1 -> { n5; n6; n7; n8; } [minlen = 3];
...