2016-11-12 122 views
1

尝试使用rank = same来控制graphviz中节点的排序请参阅e.g.我发现这种非同寻常的行为。我想要的是得到节点A,B和C按预期的顺序,即A然后B然后C:graphviz newrank = true,意外排序

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

我能够通过一对夫妇的边缘的关闭约束,以获得更好的结果:

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

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