2014-09-08 5 views
13

Я хочу сделать несколько деревьев одновременно и разместить все корневые узлы и все листовые узлы на одном уровне.Как разместить узлы на одном уровне в DOT?

Вот пример того, что я пытаюсь сделать. Корневые узлы А и Х находятся на том же уровне, и поэтому листовые узлы B, D и Z.

Graph I want

Я безуспешно пытались положить корни в один ряд и оставляет в другом следующим образом:

digraph G { 
rankdir = TB; 
subgraph { 
A -> B 
A -> C 
C -> D 
X -> Y 
rank = same; A; X; 
rank = same; B; D; Y; 
} /* closing subgraph */ 
} 

И получил этот результат, когда все находится на одном уровне. enter image description here

Любые предложения о том, что я должен попробовать? У меня уже есть корни и листья.

ответ

27

Выставление rank = same; ... заявления в фигурные скобки, например .:

digraph G { 
    rankdir = TB; 
    subgraph { 
    A -> B 
    A -> C 
    C -> D 
    X -> Y 
    // note that rank is used in the subgraph 
    {rank = same; A; X;} 
    {rank = same; B; D; Y;} 
    } /* closing subgraph */ 
} 

... дает желаемый результат:

enter image description here

+1

Это здорово! Я думал, что ранг всегда указывался как атрибут подграфа, а не как утверждение самому себе. – Jeremy

+1

Действительно ли подграф необходим? Я доволен этим результатом: digraph { rankdir = LR; 1902387216 [label = "h"]; 1902387216 -> 1736863396 [label = "child"]; 1736863396 [label = "e"]; 1736863396 -> 166482735 [label = "peer"]; {rank = same; 1736863396; 166482735;}; 166482735 [label = "a"]; 166482735 -> 915735320 [label = "child"]; 915735320 [label = "n"]; 915735320 -> 1424861798 [label = "child"]; 1424861798 [label = "d"]; 1736863396 -> 233979847 [label = "child"]; 233979847 [label = "r"]; } –

+0

@WilliamJohnHolden: Я согласен с вами в том, что подграф не нужен. В исходном вопросе она, вероятно, была частью общего графика, остальная часть которой была опущена для создания минимального примера. – Simon

Смежные вопросы