【问题标题】:How to understand graphviz dot edge and node behavior?如何理解 graphviz 点边和节点行为?
【发布时间】:2018-06-16 13:42:44
【问题描述】:

来自该图表:

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

【问题讨论】:

    标签: graphviz dot


    【解决方案1】:

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

    【讨论】:

    • 谢谢,这对这个案例有帮助。但是添加一个级别,它不会让我再次发疯。请尝试有向图 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=invis];} }
    • 哇,这一定是一个错误......在这种情况下,添加splines="line"; 似乎有效;在其他布局中可能需要“正交”或“弯曲”。
    【解决方案2】:

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

    下图给出了预期的结果。 看起来像在自然排名中构建节点并使用 dir=back 效果更好。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-14
      • 2023-04-02
      • 1970-01-01
      • 2012-05-09
      • 2012-10-10
      • 2012-10-03
      • 2012-07-02
      相关资源
      最近更新 更多