我有一个有向无圈图,我试图用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";
}发布于 2019-05-15 10:38:25
我知道这是一个老问题,但我会提供这个答案,供日后参考:
您可以使用newrank = true;,它根据graphviz.org网站执行以下操作
原有的点排序算法在聚类上是递归的。这可以产生更少的排名和更紧凑的布局,但有时代价是一个头部节点被放置在一个更高的排名比尾部节点。它还假定节点不受单独的、不兼容的子图的约束。例如,节点不能在集群中,也不能受到rank=same的约束,而节点不在集群中。 如果是newrank=true,则排序算法只进行一次全局排序,忽略了聚类。这允许节点受多个约束的约束。秩约束通常优先于边缘约束。
因此,您的源只更改如下:
digraph {
rankdir=TB;
newrank = true;
...这个例子的结果会好得多:

发布于 2015-05-20 08:37:15
这种行为是由固定内部节点等级的集群造成的。外部边缘的“力”可以水平地拉动节点,但对等级没有影响。
您必须避免集群或插入不可见的节点和边缘。
一个显示秩修正的最小示例
digraph {
subgraph cluster_1 {
1
3
}
1 -> 2
2 -> 3
}

https://stackoverflow.com/questions/30330584
复制相似问题