【问题标题】:Graphviz: how to give same rank to nodes in different clustersGraphviz:如何为不同集群中的节点赋予相同的等级
【发布时间】:2019-09-19 02:20:21
【问题描述】:

我正在尝试为两个不同集群中的两个节点赋予相同的等级,以使 dot 在同一级别显示它们。特别是在这个例子中,我希望节点 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】:

    基本上,您想跳过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;
    }
    

    给你

    【讨论】:

    • 谢谢!这正是我想要的,即使有点麻烦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    相关资源
    最近更新 更多