graphviz树布局

graphviz树布局,graphviz,Graphviz,我第一次使用graphviz。我只需要一个树布局,使所有的孩子都在同一个水平 比如说,, A->B 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";

我第一次使用graphviz。我只需要一个树布局,使所有的孩子都在同一个水平

比如说,, A->B 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";
}

如何确保子节点处于同一级别?

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

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

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

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

请注意,使用此设置后,这两条边变得很长(而且到
点,很难看),这就是为什么节点
“C:300”
与原始图形一样放置的原因。

以及使图形看起来很酷的提示将非常有用。我正在向我的朋友演示它。谢谢。但是如果我必须动态生成图形,我将不知道哪些节点是兄弟节点。我在想如果你写,A->B,A->C,A->D。。graphviz会看到B、C和D来自相同的节点,因此需要处于相同的级别。如果您动态生成它,添加
rank
行可能会更简单,因为您可以确定程序中的子节点。简而言之:这不是一个C=>H=>I的树,而是一个C=>I的树