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

时间:2013-06-06 09:43:52

标签: layout graph graphviz

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

我尝试使用“packmode”和“sortv”属性,但也许我理解它们的使用不好。这是一个简单的exameple,我希望左边是集群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提前!

1 个答案:

答案 0 :(得分:1)

这并不完美,但如果你从群集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指令和不可见边缘。