我第一次使用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";
}
如何确保孩子处于同一水平?
答案 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>