在graphviz中的节点之间绘制省略号

时间:2019-04-04 05:16:24

标签: graphviz

我对在graphviz的节点之间绘制垂直省略号感兴趣,如下所示: enter image description here

我遇到的问题是,每当尝试执行此操作时,似乎都无法x3xn垂直排列,如下所示: enter image description here

这是我尝试过的:

digraph G {
rankdir=LR
splines=line

subgraph cluster_0 {
    color=white;
    node [style=solid, color=black, shape=circle];
    x1 x2 x3 xn [group=g1];
    label = "Input Features";
}

subgraph cluster_1 {
    color=white;
    node [style=solid, color=red2, shape=circle];
    a1 [group=g2];
    label = "Activation";
}

subgraph cluster_2 {
    color=white;
    node [style=solid, color=green, shape=circle];
    out [group=g3];
    label = "Output";
}

x1 -> a1;
x2 -> a1;
x3 -> a1;
a1 -> out;
x3 -> xn [arrowhead="none", color="black:invis:black"];
}

我是graphviz的新手,所以我什至不确定我在这里是否正确使用了子图。我还尝试将子图中的节点添加到组中,但这似乎无济于事。

1 个答案:

答案 0 :(得分:3)

添加

{ rank = same; x1 x2 x3 xn }
x1 -> x2 -> x3[ style = invis ];

到您的第一个子图。具有以下效果

  • 这四个节点都是一层,即垂直排列
  • 三个编号的节点在一起

这是我的版本:

digraph G 
{
    rankdir = LR
    splines = line

    subgraph cluster_0 
    {
        color = white;
        node[ style = solid, color = black, shape = circle];
        { rank = same; x1 x2 x3 xn }
        x1 -> x2 -> x3[ style = invis ];
        label = "Input Features";
    }

    subgraph cluster_1 
    {
        color = white;
        node[ style = solid, color = red2, shape = circle ];
        a1;
        label = "Activation";
    }

    subgraph cluster_2 
    {
        color =white;
        node[ style = solid, color = green, shape = circle ];
        out;
        label = "Output";
    }

    x1 -> a1;
    x2 -> a1;
    x3 -> a1;
    a1 -> out;
    x3 -> xn[ arrowhead = "none", color = "black:invis:black" ];
}

给你

enter image description here


我打算回答您评论中的问题;关键是要颠倒相同等级内节点定义和边缘方向的顺序,这可能是由rankdir = LR布局引起的。毕竟,有一个简单的解决方案!

digraph G 
{
    rankdir = LR
    splines = line

    subgraph cluster_0 
    {
        color = white;
        label = "Input Features";
        node[ style = solid, color = black, shape = circle ];

        /* define and connect in reverse order */
        { rank = same; xn x3 x2 x1 }
        x3 -> x2 -> x1[ style = invis ];
        xn -> x3[ arrowhead = "none", color = "black:invis:black" ];
    }

    subgraph cluster_1 
    {
        color = white;
        node[ style = solid, color = red2, shape = circle ];
        a1;
        label = "Activation";
    }

    subgraph cluster_2 
    {
        color =white;
        node[ style = solid, color = green, shape = circle ];
        out;
        label = "Output";
    }

    { x1 x2 x3 } -> a1;
    a1 -> out;
}

enter image description here