Layout 如何在GraphViz中定义集群的排序顺序?

Layout 如何在GraphViz中定义集群的排序顺序?,layout,graph,graphviz,Layout,Graph,Graphviz,我编写了一个脚本,动态生成graphviz图,其中包含一些集群。 我想定义集群的排序顺序,因为当我可视化图形时,集群并不总是按照我定义的顺序 我试图使用“packmode”和“sortv”属性,但也许我理解它们的用法。下面是一个简单的示例,我希望集群B位于左侧,集群a位于右侧: digraph G { pack=true; packmode="array_u"; subgraph cluster_A { sortv=2; node [label="A1"]

我编写了一个脚本,动态生成graphviz图,其中包含一些集群。 我想定义集群的排序顺序,因为当我可视化图形时,集群并不总是按照我定义的顺序

我试图使用“packmode”和“sortv”属性,但也许我理解它们的用法。下面是一个简单的示例,我希望集群B位于左侧,集群a位于右侧:

digraph G {

    pack=true;
    packmode="array_u";

subgraph cluster_A {
    sortv=2;

    node [label="A1"] A1;
    node [label="A2"] A2;
    node [label="A3"] A3;

    A1->A2;
    A1->A3;
}

subgraph cluster_B {
    sortv=1;

    node [label="B1"] B1;
    node [label="B2"] B2;
    node [label="B3"] B3;

    B1->B2;
    B1->B3;
}

B1->A1 [constraint="false"];
}

我怎样才能解决这个问题?提前登记

这并不完美,但如果从簇B到簇A绘制一条不可见边,它将簇B作为簇A的前身,但略高于:

digraph G {

    pack=true;
    packmode="array_u";

    compound = "true";

subgraph cluster_A {
    sortv=2;

    node [label="A1"] A1;
    node [label="A2"] A2;
    node [label="A3"] A3;

    A1->A2;
    A1->A3;
}

subgraph cluster_B {
    sortv=1;

    node [label="B1"] B1;
    node [label="B2"] B2;
    node [label="B3"] B3;

    B1->B2;
    B1->B3;
}

B1->A1 [constraint="false"];

B1 -> A1
[
    ltail = "cluster_B"
    lhead = "cluster_A"
    style = "invis"
]

}

只需添加
component=true
指令和不可见边。

如果跳过
pack=true
选项,可以使用
newrank=true
,然后使用
{rank=same;A1 B1}
。然后将它们彼此相邻放置