Graphviz:如何为不同集群中的节点赋予相同的排名

问题描述 投票:0回答:1

我试图给两个不同群集中的两个节点提供相同的等级,以便使点显示在同一级别。特别是在这个例子中,我希望节点a4和b3处于同一级别。这是代码:

digraph G {
    subgraph cluster_0 {
        style=filled;
        color=lightgrey;
        node [style=filled,color=white];
        a0 -> a1 -> a2 -> a3 -> a4;
        label = "process #1";
    }

    subgraph cluster_1 {
        node [style=filled];
        b0 -> b1 -> b2 -> b3;
        label = "process #2";
        color=blue
    }

    start -> a0;
    start -> b0;
    a1 -> b3;
    b2 -> a3;
    a4 -> end;
    b3 -> end;

//  {rank=same; a4; b3;}

    start [shape=Mdiamond];
    end [shape=Msquare];
}

我尝试添加行{rank=same; a4; b3;},但这只会弄乱群集,因为从各自的群集中删除了节点a4和b3。我还尝试添加不可见的节点,但它们也以错误的方式修改了集群。知道如何解决这个问题吗?

graphviz dot
1个回答
0
投票

基本上,你想跳过b集群中的一个级别;你只能通过正确的方式引入一个不可见的节点来实现。我希望我能用这段代码说明你的观点:

digraph G {
    start[ shape=Mdiamond ];
    end[ shape=Msquare ];
    bx[ shape = point, width = 0.01 ];      // invisible node

    subgraph cluster_0 {
        style=filled;
        color=lightgrey;
        node [style=filled,color=white];
        a0 -> a1 -> a2 -> a3 -> a4;
        label = "process #1";
    }

    subgraph cluster_1 {
        node [style=filled];
        b0 -> b1;
        b1 -> b2;
        b2 -> bx[ dir = none ];          // connecting inv node without arrow
        bx -> b3;                        // continue normally
        label = "process #2";
        color=blue
    }

    start -> a0;
    start -> b0;
    a1 -> b3;
    b2 -> a3;

    a4 -> end;
    b3 -> end;
}

给你的

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.