Graphviz:禁止水平边,始终显示垂直方向

Graphviz:禁止水平边,始终显示垂直方向,graphviz,directed-acyclic-graphs,Graphviz,Directed Acyclic Graphs,我有一个有向无环图,我正试图用Graphviz的dot可视化它。默认情况下,它是从上到下排列的 通常,所有定向边的头部都低于尾部。但在某些情况下,它们被绘制为水平直线部分,即头部和尾部处于同一水平。在我的例子中,这发生在我定义子图簇之后 他们的方法是禁止这一点,并迫使它始终定位节点,使箭头指向“向下”吗 样本来源: digraph { rankdir=TB; subgraph cluster_1 { "8"; "7"; "9"; "11"; "10" } subgraph clus

我有一个有向无环图,我正试图用Graphviz的
dot
可视化它。默认情况下,它是从上到下排列的

通常,所有定向边的头部都低于尾部。但在某些情况下,它们被绘制为水平直线部分,即头部和尾部处于同一水平。在我的例子中,这发生在我定义子图簇之后

他们的方法是禁止这一点,并迫使它始终定位节点,使箭头指向“向下”吗

样本来源:

digraph {
  rankdir=TB;
  subgraph cluster_1 { "8"; "7"; "9"; "11"; "10" }
  subgraph cluster_2 { "3"; "4"; "5"; }

  "1" -> "3";
  "2" -> "5";
  "3" -> "6";
  "3" -> "5";
  "2" -> "8";
  "2" -> "4";
  "2" -> "3";
  "2" -> "6";
  "2" -> "7";
  "1" -> "8";
  "7" -> "8";
  "4" -> "6";
  "6" -> "10";
  "3" -> "11";
  "7" -> "10";
  "7" -> "6";
  "1" -> "2";
  "6" -> "5";
  "7" -> "9";
  "7" -> "5";
  "4" -> "5";
  "6" -> "8";
  "3" -> "4";
  "10" -> "11";
  "4" -> "11";
  "3" -> "8";
  "8" -> "9";
  "6" -> "9";
  "9" -> "10";
  "3" -> "10";
  "3" -> "7";
}

这种行为是由固定内部节点秩的集群引起的。”来自外部边缘的“力”会水平拉动节点,但对列组没有影响

必须避免簇或插入不可见的节点和边

显示秩修复的最小示例

digraph {
    subgraph cluster_1 {
        1
        3
    }
    1 -> 2
    2 -> 3
}

这种行为是由固定内部节点列组的集群引起的。”来自外部边缘的“力”会水平拉动节点,但对列组没有影响

必须避免簇或插入不可见的节点和边

显示秩修复的最小示例

digraph {
    subgraph cluster_1 {
        1
        3
    }
    1 -> 2
    2 -> 3
}

我知道这是一个老问题,但我将提供以下答案供将来参考:

您可以使用
newrank=true根据以下操作:

原始的点排序算法是在聚类上递归的。这可以产生更少的列组和更紧凑的布局,但有时会以头部节点放置在比尾部节点更高的列组上为代价。它还假设一个节点没有约束在单独的、不兼容的子图中。例如,节点不能在群集中,也不能受与不在群集中的节点相同的秩约束

如果newrank=true,则排名算法只进行一次全局排名,忽略集群。这允许节点受到多个约束。秩约束通常优先于边约束

因此,您的源代码仅更改如下:

  digraph {
      rankdir=TB;
      newrank = true;
      ...
对于这个例子,结果会更好:


我知道这是一个老问题,但我将提供以下答案供将来参考:

您可以使用
newrank=true根据以下操作:

原始的点排序算法是在聚类上递归的。这可以产生更少的列组和更紧凑的布局,但有时会以头部节点放置在比尾部节点更高的列组上为代价。它还假设一个节点没有约束在单独的、不兼容的子图中。例如,节点不能在群集中,也不能受与不在群集中的节点相同的秩约束

如果newrank=true,则排名算法只进行一次全局排名,忽略集群。这允许节点受到多个约束。秩约束通常优先于边约束

因此,您的源代码仅更改如下:

  digraph {
      rankdir=TB;
      newrank = true;
      ...
对于这个例子,结果会更好:


不要以为老问题的答案不会被欣赏!理想的StackOverflow问题/答案将对许多未来读者有用,甚至是几年后。感谢您添加此图像。有趣的是,默认的排名算法从右到左排列集群,而较新的算法从左到右排列集群。不要假设旧问题的答案不会被欣赏!理想的StackOverflow问题/答案将对许多未来读者有用,甚至是几年后。感谢您添加此图像。有趣的是,默认的排序算法从右到左排序集群,而较新的算法从左到右排序集群