GraphViz Node Размещение и Rankdir
Мне очень повезло с графикой и я смог сделать почти каждый
график, который мне нужен. Я пытаюсь дублировать это:
http://en.wikipedia.org/wiki/File:ICS_Structure.PNG
как можно точнее. Нижняя часть этого графика все течет сверху вниз, и у меня это нормально работает. То, что я не смог сделать, это разместить первых 3 детей прямо ниже
"Командир инцидента". Они отходят влево и вправо. Плюс обратите внимание, как ребра разделяются в верхних 8 узлах. Это возможно с точкой? Я могу справиться со всем
другие, но не те верхние узлы. Может ли кто-нибудь дать мне ключ к решению этого?
Ответы
Ответ 1
Два полезных метода для воспроизведения графических макетов:
- Невидимые узлы
- Ограничения по рангу
Здесь быстро попробуйте верхние узлы:
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]()
Ответ 2
Внутренний рендеринг dor не поддерживает стиль рендеринга органограммы, используемый в оригинале. Хотя он может генерировать ортогональные ребра (как показано), невозможно сгруппировать ребра. Вертикальное расслоение может быть достигнуто с помощью minlen
.
Принятый ответ - это несколько злоупотребление нотацией, но вполне разумный подход.
![плохой рендеринг ICS]()
Изменения в поставляемом решении:
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];