2016-11-12 63 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

我無法解釋爲什麼這會有所幫助,但是。