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

kzh*_*kzh 6 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}
}
Run Code Online (Sandbox Code Playgroud)

该图输出以下图像:

在此输入图像描述

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

我的问题是:

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

mar*_*pet 5

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

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

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

q3->q4[label="?", dir=back]
Run Code Online (Sandbox Code Playgroud)

在动态创建图形时,这当然没有帮助.

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