如何控制 GraphViz 中的节点位置

How to control node positions in GraphViz

我有以下图表Link

我想将最后一行设为 f20 f21 f22 f23 以便边 f21-f11 和 f22-f10 相互交叉。基本上这棵树会向下生长得更多,我需要对所有节点进行排序 (f20 f21 f22 f23)

您可以通过使用

的组合来实现 the desired result
  • 不可见边
  • constraint=false

我将 constraint=false 添加到应该交叉的边缘,以免它们影响布局。然后需要 2 个更多的不可见边缘以使布局引擎将节点放置在正确的位置 - f21 应该在 f10 下,f22 应该在 f11.[=18 下=]

digraph G {
  dir="back";
  f00 -> f10[dir="back"];
  f00 -> f11[dir="back"];
  f10 -> f20[dir="back"];

  // invisible edges for the layout
  f11 -> f22[style=invis];
  f10 -> f21[style=invis];

  // crossing edges without constraint
  f10 -> f22[dir="back", constraint=false];
  f11 -> f21[dir="back", constraint=false];

  f11 -> f23[dir="back"];
}