我正在尝试在media wiki上使用graphviz作为软件的文档工具。
首先,我记录了一些运作良好的阶级关系。一切都按预期垂直排列。
但是,然而,我们的一些模块是dll,我想分成一个盒子。当我将节点添加到集群时,它们已经过了边缘,但集群似乎有一个LR排名规则。或者被添加到群集中会破坏节点的TB排名,因为群集现在显示在图表的一侧。
此图表代表我要做的事情:目前,cluster1和cluster2出现在cluster0的 right 。
我希望/需要它们出现在下面。
<graphviz>
digraph d {
subgraph cluster0 {
A -> {B1 B2}
B2 -> {C1 C2 C3}
C1 -> D;
}
subgraph cluster1 {
C2 -> dll1_A;
dll1_A -> B1;
}
subgraph cluster2 {
C3 -> dll2_A;
}
dll1_A -> dll2_A;
}
</graphviz>
答案 0 :(得分:11)
答案 1 :(得分:3)
我的经验表明,constraint=false
通常会产生不必要的复杂边缘。 weight=0
似乎可以提供更好的结果:
digraph d {
subgraph cluster0 {
A -> {B1 B2}
B2 -> {C1 C2 C3}
C1 -> D;
}
subgraph cluster1 {
C2 -> dll1_A [minlen = 2];
dll1_A -> B1 [weight = 0];
/* B1 -> dll1_A [dir = back]; */
}
subgraph cluster2 {
C3 -> dll2_A;
}
dll1_A -> dll2_A;
}
答案 2 :(得分:0)
这将生成您正在寻找的图表:
digraph d {
subgraph cluster0 {
A -> {B1 B2}
B2 -> {C1 C2 C3}
C1 -> D;
}
subgraph {
rankdir="TB"
subgraph cluster1 {
C2 -> dll1_A;
dll1_A -> B1;
}
subgraph cluster2 {
C3 -> dll2_A;
}
}
dll1_A -> dll2_A;
}
这样做是创建一个子图,仅用于布局目的,以提供您想要的自上而下的排序。