Graphviz:排列节点

Graphviz:排列节点,graphviz,Graphviz,有没有可能告诉GraphViz(Dot)尝试在不拉伸任何一个维度的情况下排列图的节点? 例如,如果我创建了一个有25个节点且没有边的图,GraphViz将在一行中显示所有节点。我想要的是获得一个5 x 5“字段”的节点。您可以强制在Graphviz中设置节点的位置,尽管它不能与点引擎一起工作。 这意味着您必须想出一个算法来指定节点的位置 看看这个问题: 或者,可以使用不可见边: nodeA -> nodeB [style=invis] 并在节点之间创建网格,这可能会导致引擎以有序的方式排

有没有可能告诉GraphViz(Dot)尝试在不拉伸任何一个维度的情况下排列图的节点?
例如,如果我创建了一个有25个节点且没有边的图,GraphViz将在一行中显示所有节点。我想要的是获得一个5 x 5“字段”的节点。

您可以强制在Graphviz中设置节点的位置,尽管它不能与点引擎一起工作。 这意味着您必须想出一个算法来指定节点的位置

看看这个问题:

或者,可以使用不可见边:

nodeA -> nodeB [style=invis]
并在节点之间创建网格,这可能会导致引擎以有序的方式排列节点


在这两种情况下,您都必须通过指定节点的位置或将节点连接在一起来指定节点的排列方式。

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;
这将导致与给定节点相同的结果,但在节点大小变化时可能不太稳定