首页 > 解决方案 > 如何理解 graphviz 点边和节点行为?

问题描述

来自这张图:

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 保持在图表的中间?

标签: graphvizdot

解决方案


添加{rank=same; a0 -> x0 -> b0 [style=invis];}到您的图表会得到所需的结果 - 这会强制顶部节点按特定顺序排列,但会隐藏为此添加的边。但是,我完全不知道为什么这应该是必要的。

在此处输入图像描述


推荐阅读