graphviz树布局

时间:2010-08-11 04:53:42

标签: graphviz

我第一次使用graphviz。我只需要一个树形布局,以便所有孩子处于同一水平。

例如, A->乙 A-&以及c A-> d

然后,B,C和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 个答案:

答案 0 :(得分:9)

要获取同一级别的节点,例如“B:300”和“C:300”,请添加以下行:

{rank=same; "B:300" "C:300"}

答案 1 :(得分:3)

您提供的图表不代表树,而是有向无环图(在树中,每对节点之间只有一条不同的路径)。如果您的输入是树,那么只需使用dot即可生成您想要的内容。如果您还想在示例中添加非树边缘(例如"C:300" -> "H:135"),则可以为它们指定较低的权重,以确保dot不会尝试针对它们优化布局这些边缘。

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

请注意,使用此设置时,这两条边会变得非常长(并且变为dot,这很丑陋),这就是为什么节点"C:300"放置在原始图形中的原因。< / p>