2015-11-05 163 views
1

是否可以告訴GraphViz(Dot)嘗試排列圖的節點而不伸展任何一個維度?例如,如果我創建了一個包含25個節點且沒有邊的圖形,GraphViz將其與單個行中的所有節點一起可視化。我想要的是獲得5 x 5「字段」的節點。Graphviz:排列節點

回答

1

您可以強制Graphviz中節點的位置,儘管它不適用於點引擎。 這意味着你將不得不想出一個算法來指定節點的位置。

看這個問題:How to force node position (x and y) in graphviz

或者您可以使用隱形邊緣:

nodeA -> nodeB [style=invis] 

並創建節點之間的網格,這可能會導致發動機安排在一個有序的方式的節點。

在這兩種情況下,您都必須指定如何通過指定其位置或將它們連接在一起來排列節點。

與無形的邊緣結合
2

rank=same是你的朋友:

digraph Test 
{ 
    nodesep = 0.5;     // even node distribution 
    node [ shape = circle, width = 0.7 ]; 
    edge [ style = invis ]; 

    { rank = same; A; B; C; D; E } 
    { rank = same; F; G; H; I; J } 
    { rank = same; K; L; M; N; O } 
    { rank = same; P; Q; R; S; T } 
    { rank = same; U; V; W; X; Y } 

    C -> { F G H I J } 
    H -> { K L M N O } 
    M -> { P Q R S T } 
    R -> { U V W X Y } 
} 

取而代之的是最後四行,你可以簡單地使用

A -> F -> K -> P -> U; 

這將導致與給定節點相同的結果但是當節點大小變化時可能不太穩定。

enter image description here