Graphviz - 定义集群的顺序

Graphviz - define the order of the clusters

我正在 graphviz/dot 中生成集群节点。简化示例:

digraph G {
    rankdir=LR

    n2a->n3
    n1->n2b
    n2b->n2a
    n2b->n3
    n3->n1

    subgraph cluster_1 { label="cluster_1" n1 }
    subgraph cluster_2 { label="cluster_2" n2a n2b }
    subgraph cluster_3 { label="cluster_3" n3 }
}

我想强制 dot 始终将集群从右到左按升序排列(左边是集群 1,接下来是集群 2 等),但要按照 dot 自动指示的方式排列每个集群内的节点。

我试着玩 clusterrankranknewrankconstraint=false,但没能成功。怎么做到的?

您可以通过添加边来“强制”发生这种情况,以建立每个集群中每个节点的等级。 cluster_1 中的每个节点的排名都低于 cluster_2 中的每个节点,等等。像这样:

digraph G {
    rankdir=LR

    n2a->n3
    n1->n2b
    n2b->n2a
    n2b->n3
    n3->n1

    subgraph cluster_1 { label="cluster_1" n1 }
    subgraph cluster_2 { label="cluster_2" n2a n2b }
    subgraph cluster_3 { label="cluster_3" n3 }
    // simple-minded solution - force clusters based on (added) rank
    edge [style=invis]
    {n1} -> {n2a n2b} -> {n3}
}

给予: