Подтвердить что ты не робот

GraphViz Node Размещение и Rankdir

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

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

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

4b9b3361

Ответ 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];