Graphviz节点rank = after(x)

时间:2019-01-28 20:14:34

标签: graphviz

是否有一种方法可以使某个节点在另一个节点之后 之后出现,而不使用rank=same方法?相同对图形有很大的限制,但是之后赋予了它更多的自由度。

a graph

digraph G {
    rankdir=LR
    a->b->c->d
    a->x->y
    {rank = same; d; x;}
}

在此示例中,我不在乎 x d 的等级相同,只是它在 c 之后。

曾经有人问过类似的问题,但没有回答:  Python - Graphviz force rank to be at least the same

子图可以用作分组策略,但是我已经在使用子图了。我认为节点不能同时位于两个。

digraph G {
    rankdir=LR
    a->b->c->d
    a->x->y
    subgraph cluster_after{
        x; d; y;
    }
}

enter image description here

这两种方法都需要一点用户意识,但是我真正想要的是能够说“电之后才有电”,而不必知道多远之后,中间有多少个节点,或它们如何连接。这可能吗?

1 个答案:

答案 0 :(得分:2)

如果我将“闪电接电”翻译成“ x接电c”,那么可以通过告诉graphviz c -> x[ style = invis ]来达到这种效果。这在两者之间创建了不可见的层次关系:

digraph G 
{
    rankdir = LR;
    a -> b -> c -> d;
    a -> x -> y;
    c -> x[ style = invis ];
}

产生

enter image description here

不过,我对您的后半句“但不必知道...”不太理解。在我的解决方案中,如果您不给出其他具体说明,x总是比c低一级。