【问题标题】:Positioning Nodes With `{rank=same ...}` Side Effects使用 `{rank=same ...}` 副作用定位节点
【发布时间】:2019-12-14 03:47:26
【问题描述】:

我有一个这样定义的图表:

digraph G {
    rankdir=LR
    node[shape=circle]
    q_[shape=none label=""]
    q3[shape=doublecircle]
    q4[shape=doublecircle]
    q_->q0
    q0->q1[label="λ"]
    q0->q2->q4[label=a]
    q1->q4->q2[label=b]
    q1->q3[label=a]
    q3->q4[label="λ"]
    {rank=same; q4 q3}
    {rank=same; q1 q2}
}

图表输出如下图像:

你可以在这里玩图:http://graph.gafol.net/derive/effpjWfSD

我的问题是:

为什么 q4 在渲染图中指向 q3 而不是我在标记中指定的方式?是不是因为{rank=same; q4 q3} 比仅仅定位节点有更多的语义意义?如果是这种情况,我该如何定位节点,以使输出不像不使用 {rank=same; ...} 的输出那样可怕?

【问题讨论】:

    标签: graphviz


    【解决方案1】:

    rank=same 中没有隐藏的语义含义,这只是一个错误

    当例如省略边缘的标签或rankdir=LR时正确绘制边缘。

    您可以通过将dir 属性添加到错误绘制的边缘来更正此特定图表:

    q3->q4[label="λ", dir=back]
    

    这在动态创建图表时当然没有帮助。

    此错误可能与rankdir=LR 引起的其他已知错误之一有关,报告于http://www.graphviz.org:8080/bugs/openbugs.html

    【讨论】:

    • 添加 dir=back 作为边缘属性有效。正确的节点被指向。谢谢。
    【解决方案2】:

    改变 {rank=same; q4 q3} 到 {rank=same; q3 q4} 也可能有效(未经测试)。从上到下、从左到右读取这些节点(q3 和 q4)的最新布局指令会更改先前行的顺序并覆盖先前的箭头:

    {等级=相同;第四季度第三季度}

    也许这不是错误。

    【讨论】:

      猜你喜欢
      • 2021-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 2017-02-27
      • 2016-11-21
      • 2019-07-21
      相关资源
      最近更新 更多