我正在尝试使用点文件和graphviz对齐三个或更多子图。我认为我的问题最好用几个例子来表示:
我的第一次尝试:
digraph FutopJobFlow {
rankdir=LR;
node [shape=box]
compound=true
subgraph clusterA {label = " A ";
A -> a1;
a1 -> a2;
a2 -> a3;
}
subgraph clusterB {label = " B ";
B -> b1;
b1 -> b2;
}
subgraph clusterC {label = " C ";
C -> c1;
c1 -> c2;
}
A -> B [lhead=clusterB];
B -> C [lhead=clusterC];
X -> A [lhead=clusterA];
Y -> B [lhead=clusterB];
Z -> C [lhead=clusterC];
}
给出这个结果:
这里各个子图看起来像我想要但是没有对齐。因此,我尝试了命令级别:
digraph FutopJobFlow {
rankdir=LR;
node [shape=box]
compound=true
subgraph clusterA {label = " A ";
A -> a1;
a1 -> a2;
a2 -> a3;
}
subgraph clusterB {label = " B ";
B -> b1;
b1 -> b2;
}
subgraph clusterC {label = " C ";
C -> c1;
c1 -> c2;
}
{rank=same; A; B; C;}
A -> B [lhead=clusterB];
B -> C [lhead=clusterC];
X -> A [lhead=clusterA];
Y -> B [lhead=clusterB];
Z -> C [lhead=clusterC];
}
导致此图表:
此处对齐看起来不错,但现在'A','B'和'C'不再位于子图内!
我已经尝试了其他几种方法来实现对齐,'A','B'和'C'在各自的子图中,但没有成功。
有人可以帮忙吗?
@ Marapet - 谢谢它现在几乎是完美的 - 当我添加'constraint = false'参数时它看起来像这样:
Graph with constraint parameter
如果子图“A”高于'B'并再次高于'C',那将是完美的。
答案 0 :(得分:1)
在图表的第一个版本中,您可以通过添加属性constraint=false
来禁用A-B和B-C之间边缘的节点排名效果:
A -> B [lhead=clusterB, constraint=false];
B -> C [lhead=clusterC, constraint=false];
然后应该将子图对齐。