Graphviz:安排节点

时间:2015-11-05 16:09:41

标签: graphviz

是否有可能告诉GraphViz(Dot)尝试排列图形的节点而不拉伸任何尺寸? 例如,如果我创建一个包含25个节点且没有边缘的图形,GraphViz会将其显示为单行中的所有节点。我想要的是获得一个5 x 5“字段”的节点。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以在Graphviz中强制节点的位置,尽管它不适用于点引擎。 这意味着您必须提出一种算法来指定节点的位置。

看看这个问题:How to force node position (x and y) in graphviz

或者你可以使用隐形边缘:

nodeA -> nodeB [style=invis]

在节点之间创建一个网格,这可能会导致引擎以有序的方式排列节点。

在这两种情况下,您都必须通过指定位置或将它们连接在一起来指定您想要如何排列节点。