如何在graphviz中垂直对齐子图中的特定节点

时间:2017-04-25 19:52:04

标签: graphviz dot

我正在尝试生成外观漂亮的对齐图,其中每个s_i都在d_i下面。这是我的代码:

digraph G {
    rankdir="LR"

    graph [bgcolor="#EAEAF2" fontname="Noto Sans", colorscheme=gnbu3]
    node [fontname="Noto Sans" style=filled, colorscheme=gnbu3]
    edge [fontname="Noto Sans"]

    node[fontname="Noto Sans"];
    subgraph cluster_1 {
        node [style=filled, color=1];
        edge [style="invis"];
        s3[group=3];
        s0 -> s1 -> s2 -> s3;
        label = "Raw signal";
        color=2;
    }

    subgraph cluster_0 {
        color=lightgrey;
        node [style=dotted,color=""];
        edge [style="invis"];
        d0[label="..."]
        d1[label="..."]
        d2[label="..."]
        d3[label="...", group=f]
        label = "CNN";
        d0 -> d1 -> d2 -> d3;
    }
    edge[style=dotted, weight=10000]
    s0 -> d0;
    s1 -> d1;
    s2 -> d2;
    s3 -> d3;
}

我得到的只是: http://imgur.com/MG0xtS3

如果我尝试添加:

{rank=same s0->d0}; 

s0和d0节点对齐,但它们不属于子集

1 个答案:

答案 0 :(得分:1)

只需更改子图的顺序(cluster_0优先),然后将行edge[style=dotted, weight=10000]更改为edge[style=dotted, constraint=false]

这会将子图放入正确的(外观)顺序,并防止2个子图的节点之间的边缘对排名产生影响。