2016-11-12 3 views
1

Попытка использовать rank = same для управления упорядочением узлов в Graphviz см., Например, e.g. Я нашел это необыкновенное поведение. То, что я хочу, чтобы в узлах а, б и в ожидаемом порядке, т.е. тогда б тогда с:graphviz with 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

Я не могу объяснить, почему это помогает, однако.

Смежные вопросы