Graphviz 节点 rank=after(x)

Graphviz nodes rank=after(x)

有没有办法让一个节点在另一个节点之后到达某个地方,但不使用rank=same方法? Same 非常显着地限制了图表,但之后给了它更多的自由度。

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

在这个例子中,我不关心 xd 的等级相同,只是它在 [=30= 之后]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;
    }
}

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

如果我将 "lightning comes after electricity" 翻译成 "x comes after c",那么您可以通过告诉 graphviz c -> x[ style = invis ] 来实现这种效果。这在两者之间创建了一种无形的层次关系:

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

生产

虽然我不太理解你的后半句 "but without having to know..."。在我的解决方案中,如果您不给出其他具体说明,x 将始终比 c 低一级。