graphviz - 为什么从上到下的graphviz点图逆时针排列?

标签 graphviz dot

我用图形和更多细节更新了问题。感谢 marapet,如果没有 hack,我无法生成所需的图像结果。

为什么这段代码会产生这个图表?

digraph {
 rankdir = TB;
 1 -> 2 -> 3 -> 1;
}

如何让 graphviz/dot 产生这样的顺时针方向?

更新

这是我要生成的最终图表(afaik 这样逻辑上正确)

digraph {
  rankdir = TB
  start -> 1
  1 -> 2 -> 3 -> 1
  3 -> end
  3 -> increment
  end -> product
  {rank = same; 2; 3; increment}
  {rank = same; end; product}
}

产生这个结果

虽然我想要这个

谢谢

最佳答案

Why does this code produce this graph?

有向图根据它们的关系将其节点置于不同的等级。由于 1 指向 2,它必须高于 2,并且由于 2 指向 3,它必须高于 3。 但由于 3 也指向 1,所以圆已经完成 - 3 个节点中的任何一个都可能在顶部。 Graphviz 只是将第一个提到的节点放在顶部。因此,如果你改写:

2 -> 3 -> 1 -> 2;

节点 2 会在上面,并且在使用时

3 -> 1 -> 2 -> 3;

节点 3 将是顶部节点。

可能布局引擎 neato 更适合这个图,产生一个顺时针方向的图:

neato layout

如果你绝对必须使用点布局引擎,下面的点代码

digraph {
  rankdir = TB;
  1 -> 2;
  3 -> 2 [dir=back];
  3 -> 1;
  {rank=same; 2; 3;}
}

通过将边 2->3 更改为 3->2 并同时反转箭头方向来产生所需的输出。

或者,同样技术的另一种变体,更容易解释:我们颠倒了所有箭头的顺序(1->3->2->1),但向后显示它们(dir =back),并强制节点 2 和 3 处于同一等级:

rankdir = TB;
edge[dir=back];
1 -> 3 -> 2 -> 1;
{rank=same; 2;3;}

此 hack 产生以下结果:

hack

关于graphviz - 为什么从上到下的graphviz点图逆时针排列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4889189/

相关文章:

windows - keras plot_model 告诉我安装 pydot

format - 如何在Graphviz上添加虚线下划线标签?

java - 使用Java调用sccmap

graph - 可视化具有大约 500 个节点的二分图

c - Graphviz 作为库错误 : too many arguments to function ‘agnode’

graphviz - DOT语言是否支持变量/别名?

scikit-learn - Graphviz.Source 未在 Jupyter Notebook 中呈现

c - 使用 GraphViz 了解 -fdump-tree 输出 gcc

graphviz - 点:如何在填充另一种颜色的同时用黑色轮廓装饰图形节点?

R:RGraphviz 安装