Graphviz Tree Layout - PullRequest
       4

Graphviz Tree Layout

4 голосов
/ 11 августа 2010

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

Например, A-> B A-> C A-> D

THEN B, C AND DДОЛЖЕН БЫТЬ НА ОДНОМ УРОВНЕ.

Ниже приведен код, который я использую.

digraph unix {
    size="6,6";
    node [color=lightblue2, style=filled];

    "A:1000" -> "B:300";
    "A:1000" -> "C:300";
    "A:1000" -> "D:200";
    "B:300" -> "E:140";
    "B:300" -> "F:164";
    "B:300" -> "G:75";
    "C:300" -> "H:135";
    "C:300" -> "I:91";
    "D:200" -> "E:140";
    "D:200" -> "F:164";
    "D:200" -> "G:75";
    "E:140" -> "F:164";
    "E:140" -> "G:75";
    "F:164" -> "G:75";
    "G:75" -> "H:135";
    "H:135" -> "I:91";
}

Как мне убедиться, что дети находятся на одном уровне?

Ответы [ 2 ]

9 голосов
/ 11 августа 2010

Чтобы получить узлы одного уровня, скажем, «B: 300» и «C: 300», добавьте следующую строку:

{rank=same; "B:300" "C:300"}
3 голосов
/ 11 августа 2010

Граф, который вы представили, представляет собой не дерево, а ориентированный ациклический граф (в дереве существует только один отдельный путь между каждой парой узлов).Если ваш ввод был бы деревом, то использование dot даст то, что вы хотите.Если вы также хотите добавить ненулевые ребра, например "C:300" -> "H:135" в вашем примере, вы можете указать для них меньший вес, чтобы убедиться, что dot не пытается оптимизировать макет относительно этих ребер.

"C:300" -> "H:135" [weight=0];
"C:300" -> "I:91" [weight=0];

Обратите внимание, что эти два ребра становятся очень длинными (и до dot, некрасиво) с этим параметром, и это причина, по которой узел "C:300" размещается так, как он есть в вашем исходном графике.

...