排列graphviz集群

时间:2018-11-29 08:09:19

标签: graphviz

我正在尝试生成以下构造: 我有四个图。他们中的三个应该位于第一个“行”中,它们的垂直中心都垂直对齐。第四个图形应该位于第二个“行”中其他三个图形的下方。它应与上一行中间图的水平中心或整个上一行的水平中心水平对齐。此外,在单独的群集/图形的某些成员之间将存在边缘。 Here is an example.在cluster_a和cluster_d的成员之间只有边,但是在任何集群组合的成员之间可能有边。

1 个答案:

答案 0 :(得分:0)

通常,您可以通过添加一些其他的不可见的丝状结点和边缘来实现此目的,例如:

digraph G {
    rankdir=LR
    edge[minlen=2]//enable finer control over node location when scarfolding
    subgraph cluster_d { label=cluster_d
        d_0->d_2
        d_1->d_0
        //d_1->d_3
        //extra node to simulate edge between edges
        d_13[shape=point]
        d_1->d_13[dir=none minlen=1]
        d_13->d_3[minlen=1]
        d_3->d_2
        d_3->d_3
    }
    subgraph cluster_abc { // better align cluster
    subgraph cluster_a { label=cluster_a
        a_0->a_2
        a_0->a_3
        a_1->a_0
        a_1->a_1 
        a_1->a_2
        a_1->a_3
        //a_2->a_3
        //extra node to simulate edge between edges
        a_23[shape=point]
        a_2->a_23[dir=none minlen=1]
        a_23->a_3[minlen=1]
        a_3->a_2
        a_3->a_3
    }
    subgraph cluster_c { label=cluster_c
        c_0->c_0
        c_0->c_1
        c_0->c_2
        c_0->c_3
        c_1->c_3
        c_3->c_3
        c_2->c_0
        c_2->c_1
        c_2->c_2
        c_2->c_3
    }
    subgraph cluster_b { label=cluster_b
        b_0->b_0
        b_0->b_2
        b_0->b_3
        b_1->b_1
        b_1->b_2
        b_1->b_3
        b_2->b_0
        b_3->b_2
    }
    color=invis
    }
    {//scarfolding
        edge[style=invis]node[style=invis] //hide scarfolding
        {
            rank=same 
            node[shape=point] //minimize impact on edge routing around the scarfolding nodes
            x_0 
            x_1
        }
        a_3->c_0
        c_3->b_0
        // we can not use same rank across cluster boundary so instead of a_3->d_1 we do a_2->x_0 + x_1->d_1
        a_2->x_0 
        x_1->d_1[minlen=3]
    }
    {
        edge[headclip=false tailclip=false]
        a_2->d_1[dir=none constraint=false]
        a_3->d_3[dir=none]
    }
    a_23->d_13[dir=none constraint=false]
}

rendered on viz-js.com