如何理解graphviz点边和节点行为?

如何理解graphviz点边和节点行为?,graphviz,dot,Graphviz,Dot,从这个图表中可以看出: digraph G { a0 -> a1 -> a2; x0 -> x1; b0 -> b1 -> b2; } 它给出了这种图形表示: a 0 x 0 b 0 | | | a 1 x 1 b 1 | | a 2 b 2 我想把a2连接到x1,把x1连接到b2 所以我试着: digraph G { a0 -> a1 -> a2; x

从这个图表中可以看出:

digraph G {

a0 -> a1 -> a2;
x0 -> x1;
b0 -> b1 -> b2;

}
它给出了这种图形表示:

a 0    x 0    b 0
 |      |      |
a 1    x 1    b 1
 |             |
a 2           b 2
我想把a2连接到x1,把x1连接到b2

所以我试着:

digraph G {

a0 -> a1 -> a2;
x0 -> x1;
b0 -> b1 -> b2;

a2 -> x1 [constraint=false];
x1 -> b2 [constraint=false];

}
我的期望是:

a 0    x 0    b 0
 |      |      |
a 1    x 1    b 1
 |  /       \  |
a 2           b 2
但不幸的是,它是这样呈现的,我不知道为什么

a 0    b 0    x 0
 |      |      |
 |      |      |
 |      |      |
a 1    b 1    x 1
 |      | _ / / 
 |      +    / 
 |  _/   |  /  
a 2    b 2

我如何才能更好地理解这是为什么,并帮助我在图的中间保持X0>X1?<添加>代码> {Laq=相同;A0->X0>B0[style=vIs];}到您的图给出了期望的结果-这迫使顶部节点处于特定的顺序,但是隐藏了添加的边缘来做这件事。然而,我完全不知道为什么这是必要的


使用constraint=false似乎会导致“特殊”结果

下图给出了所需的结果。 看起来在它的自然排名中构造节点,使用dir=back工作得更好

digraph G {
    a0 -> a1 -> a2;
    x0 -> x1;
    b0 -> b1 -> b2;
    x1 -> a2 [dir=back];
    x1 -> b2;
}

谢谢,这对这个案子很有帮助。但是加上一个关卡,我就不会再发疯了。请尝试有向图G{a0->a1->a2->a3;b0->b1;c0->c1->c2->c3;a3->b1[constraint=false]b1->c3[constraint=false]{rank=same a0->b0->c0[style=invi];}}哇,那一定是个bug。。。添加
spline=“line”在这种情况下似乎有效;在其他布局中可能需要“正交”或“曲线”。