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

时间:2015-04-25 11:47:17

标签: graph graphviz decision-tree graph-visualization

我想使用graphviz绘制决策树图表。

我想绘制的图表如下所示:

enter image description here

我使用以下点语言:

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生成的节点从左到右依次排序?此外,就决策树而言,即使从左到右排序不同,这两棵树也完全相同?

2 个答案:

答案 0 :(得分:3)

要解决此问题,您只需更改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网站有一个blog post about this problem,如果有机会你可以查看。

答案 1 :(得分:0)

请仅注意由于标题中的“从左到右”而点击此帖子的任何人。 @marapet有一个很好的答案to this post,注意外观顺序不能保留布局。如果发现左右布局是在图中的某个点建立的,然后被后续边缘打断,请尝试向后续边缘添加constraint=false,以防止它们更改现有的l-r布局。