2015-05-19 6 views
0

У меня есть направленный ациклический граф, который я пытаюсь визуализировать, используя Graphviz's dot. По умолчанию он выложен сверху вниз.Graphviz: запретить горизонтальные края, всегда показывать вертикальную ориентацию

Обычно все направленные ребра имеют голову ниже хвоста. Но в некоторых случаях они нарисованы как горизонтальная секция прямой линии, то есть голова и хвост находятся на одном уровне. В моем случае это произошло после того, как я определил кластеры подграфов.

Это их способ запретить это и заставлять его всегда позиционировать узлы так, чтобы стрелки указывали «вниз»?

источник образца:

digraph { 
    rankdir=TB; 
    subgraph cluster_1 { "8"; "7"; "9"; "11"; "10" } 
    subgraph cluster_2 { "3"; "4"; "5"; } 

    "1" -> "3"; 
    "2" -> "5"; 
    "3" -> "6"; 
    "3" -> "5"; 
    "2" -> "8"; 
    "2" -> "4"; 
    "2" -> "3"; 
    "2" -> "6"; 
    "2" -> "7"; 
    "1" -> "8"; 
    "7" -> "8"; 
    "4" -> "6"; 
    "6" -> "10"; 
    "3" -> "11"; 
    "7" -> "10"; 
    "7" -> "6"; 
    "1" -> "2"; 
    "6" -> "5"; 
    "7" -> "9"; 
    "7" -> "5"; 
    "4" -> "5"; 
    "6" -> "8"; 
    "3" -> "4"; 
    "10" -> "11"; 
    "4" -> "11"; 
    "3" -> "8"; 
    "8" -> "9"; 
    "6" -> "9"; 
    "9" -> "10"; 
    "3" -> "10"; 
    "3" -> "7"; 
} 

ответ

1

Это поведение вызвано кластеров, которые фиксируют ранг узла внутри. «Сила» из внешних краев тянет узлы по горизонтали, но не влияет на ранг.

Вы должны либо избегать кластеров, либо вставлять невидимые узлы и края.

Минимальный пример, показывающий ранг затруднительное

digraph { 
    subgraph cluster_1 { 
     1 
     3 
    } 
    1 -> 2 
    2 -> 3 
} 

enter image description here