在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 生成的节点从左到右的顺序?此外,就决策树而言,即使从左到右的顺序不同,这两棵树是否完全相同?
要解决此问题,您只需更改 B
和 al
节点的顺序即可:
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 布局。
我想用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 生成的节点从左到右的顺序?此外,就决策树而言,即使从左到右的顺序不同,这两棵树是否完全相同?
要解决此问题,您只需更改 B
和 al
节点的顺序即可:
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 布局。