如何在Graphviz中强制节点从左到右排列?

7
我想使用graphviz画一棵决策树图表。
我要绘制的图看起来像这样: enter image description here 我正在使用以下dot语言:
graph a {
  A [shape=box; label="A"]
  B [shape=box; label="B"]
  al [shape=none; label="0"]
  bl [shape=none; label="1"]
  br [shape=none; label="0"]

  A -- al [label="0"];
  A -- B [label="1"];
  B -- bl [label="0"];
  B -- br [label="1"];

}

然而,我的图表结果看起来像这样:

enter image description here

如何强制Graphviz生成的节点从左到右排序?此外,就决策树而言,即使从左到右的顺序不同,这两棵树是否完全相同?

你使用的是哪种编程语言? - Tim Biegeleisen
@TimBiegeleisen 你好,Tim,我只是手写了.gv文件。 - Letholdrus
2个回答

5
为了解决这个问题,你只需要改变Bal节点的顺序即可:
graph a {
  A [shape=box; label="A"]
  al [shape=none; label="0"]
  B [shape=box; label="B"]
  bl [shape=none; label="1"]
  br [shape=none; label="0"]

  A -- al [label="0"];
  A -- B [label="1"];
  B -- bl [label="0"];
  B -- br [label="1"];
}

顺便提一下,graphviz网站有一个关于这个问题的论坛帖子,如果有机会,您可以查看一下。链接如下:forum post about this problem

3

针对标题中“从左到右”这个问题,提醒大家注意。@marapet在这篇文章中给出了一份极好的回答,指出出现的顺序并不能保持图形布局。如果您发现图中已经建立了从左到右的布局,但随后的边会破坏它,则可以尝试向随后的边添加constraint=false以防止其改变现有的从左到右布局。

"Original Answer"翻译成"最初的回答"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接