Как связать соседние узлы на одной высоте при рисовании в GraphViz?
Я пытаюсь нарисовать следующее (суффикс-дерево) с помощью GraphViz:
digraph G {
1[label = " "];
2[label = " "];
3[label = " "];
4[label = " "];
5[label = " "];
6[label = " "];
7[label = " "];
8[label = " "];
// edges drawn vertically, all fine.
1 -> 2 [label="ab"];
1 -> 3 [label=" b"];
1 -> 4 [label=" c$"];
2 -> 5 [label="abc$"];
2 -> 6 [label="c$"];
3 -> 7 [label=" abc$"];
3 -> 8 [label="c$"];
// node 3 should be on the right side of node 2, and
// a cross line should be drawn horizontally
2 -> 3 [style=dotted,label="abc$"];
}
Проблема в том, что узел, достигаемый следующими ребрами "abc$" и "b", не находится на той же высоте, что и те два узла, которые достигаются после "ab" и "c$".
Кто-нибудь сталкивался с такой же ситуацией и мог бы поделиться решением?
1 ответ
Решение
Ах, ну, не искать правильные термины! "размещение узлов на горизонтальной линии", предлагает решение.
Этот код теперь правильно размещает узлы 2,3,4 на одной и той же "горизонтальной линии".
digraph G {
1[label = " "];
2[label = " "];
3[label = " "];
4[label = " "];
5[label = " "];
6[label = " "];
7[label = " "];
8[label = " "];
node[group=sameheight];
{ rank = same; 2; 3; 4; }
1 -> 2 [label="ab"];
1 -> 3 [label=" b"];
1 -> 4 [label=" c$"];
2 -> 3 [style=dotted];
2 -> 5 [label="abc$"];
2 -> 6 [label="c$"];
3 -> 7 [label=" abc$"];
3 -> 8 [label="c$"];
}
Надеюсь, это поможет кому-то.