2015-11-05 185 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