graphviz with newrank = true,意外排序

时间:2016-11-12 13:44:40

标签: graphviz

尝试使用rank = same来控制graphviz中节点的排序,例如e.g. 我发现了这种非同寻常的行为。我想要的是按预期顺序获取节点a,b和c,即a然后b然后c:

digraph foo{
newrank=true
"o4"->"x3"
"o4"->"x4"
"o5"->"x3"
"o5"->"x4"

subgraph cluster_7 {

"a"->"i"
"b"->"i"
"c"->"i"

} 
{rank="same";"a"->"b";"b"->"c"}

}

unexpected behaviour

我认为没有理由为什么graphviz会破坏a,b和c的顺序。如果我改变代码的任何方面,例如删除o节点和x节点之间的一条边,问题就消失了。如果我删除newrank=true,它也会消失,但我需要这个,因为否则rank=same规范会将节点移出子图。如果我将子图形成一个普通的簇,它就会消失,即不要用cluster_开始这个名字,但我也需要它。如果我删除rank=same行,它就会消失,但我也需要这个。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

通过关闭几条边的约束,我得到了更好的结果:

digraph foo{
newrank=true
"o4"->"x3"
"o4"->"x4"
"o5"->"x3"
"o5"->"x4"

subgraph cluster_7 {

"a"->"i" [constraint=false]
"b"->"i"
"c"->"i" [constraint=false]

} 
{rank="same";"a"->"b";"b"->"c"}

}

enter image description here

但是,我无法解释为什么这会有所帮助。