我有一个有向无环图,我试图使用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";
}
答案 0 :(得分:2)
我知道这是一个老问题,但是我将提供此答案以供将来参考:
您可以使用begin="2s"
,它根据graphviz.org website执行以下操作:
dot中的原始排序算法在群集上是递归的。这样可以产生较少的等级和更紧凑的布局,但是有时会以将头节点放置在比尾节点更高的等级上为代价。它还假定节点不受单独的不兼容子图中的约束。例如,一个节点不能位于群集中,并且受rank = same约束,而节点不在群集中。
如果newrank = true,则排名算法执行单个全局排名,而忽略集群。这允许节点受到多个约束。等级约束通常将优先于边缘约束。
因此您的来源仅更改如下:
newrank = true;
对于此示例,结果将更好:
答案 1 :(得分:1)
该行为是由修复内部节点排名的集群引起的。来自外边缘的'强制'确实水平拉节点,但对等级没有影响。
您必须避免群集或插入不可见的节点和边缘。
显示排名修复的最小示例
digraph {
subgraph cluster_1 {
1
3
}
1 -> 2
2 -> 3
}