在graphviz中强制节点从左到右的顺序?

Force the left to right order of nodes in graphviz?

我想用graphviz画一个决策树图表。

我想画的图是这样的:

我正在使用以下点语言:

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"];

}

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

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

要解决此问题,您只需更改 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 有机会的话可以看看。

因为标题中的 "left to right" 而点击此 post 的人请注意。 @marapet 有一个很好的答案 to this post 指出出现顺序不会保留布局。如果您发现 left-right 布局是在图表中的某个点建立的,然后被后续边缘破坏,请尝试将 constraint=false 添加到后续边缘以防止它们改变现有的 l-r 布局。