2

我写了一个动态生成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"];
}

我该如何解决这个麻烦?Tnanks 提前!

4

1 回答 1

2

这并不完美,但如果你从集群 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"
]

}

只需添加compound=true指令和不可见的边缘。

于 2013-07-15T16:02:26.073 回答