使用`{rank = same ...}`副作用定位节点

时间:2011-03-08 14:04:06

标签: graphviz

我有一个如此定义的图表:

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}
}

图表输出以下图像:

enter image description here

您可以在此处使用图表:http://graph.gafol.net/derive/effpjWfSD

我的问题是:

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

2 个答案:

答案 0 :(得分:5)

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

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

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

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

在动态创建图表时,这当然无济于事。

此错误可能与rankdir=LR引起的{{1}}引起的其他已知错误之一相关,<{3}}

答案 1 :(得分:0)

改变{rank = same; q4 q3}到{rank = same; q3 q4}也可以工作(未经测试)。从上到下,从左到右阅读,这些节点(q3和q4)的最新布局指令改变了前一行的排序并覆盖了之前的箭头:

{秩=相同; q4 q3}

也许这不是一个错误。