如何理解 graphviz 点边和节点行为?
How to understand graphviz dot edge and node behavior?
来自这张图:
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 保持在图表的中间?
将 {rank=same; a0 -> x0 -> b0 [style=invis];}
添加到您的图形中会得到所需的结果 - 这会强制顶部节点按特定顺序排列,但会隐藏为此添加的边。然而,我完全不知道为什么这是必要的。
使用 constraint=false 似乎会导致 'special' 结果。
下图给出了想要的结果。
看起来在其自然排名中构建节点并使用 dir=back 效果更好。
digraph G {
a0 -> a1 -> a2;
x0 -> x1;
b0 -> b1 -> b2;
x1 -> a2 [dir=back];
x1 -> b2;
}
来自这张图:
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 保持在图表的中间?
将 {rank=same; a0 -> x0 -> b0 [style=invis];}
添加到您的图形中会得到所需的结果 - 这会强制顶部节点按特定顺序排列,但会隐藏为此添加的边。然而,我完全不知道为什么这是必要的。
使用 constraint=false 似乎会导致 'special' 结果。
下图给出了想要的结果。 看起来在其自然排名中构建节点并使用 dir=back 效果更好。
digraph G {
a0 -> a1 -> a2;
x0 -> x1;
b0 -> b1 -> b2;
x1 -> a2 [dir=back];
x1 -> b2;
}