我有一个图,我将其设置为“ rankdir = LR;”。这样“ rank = same”将自上而下。
我决定在此图中添加一些聚类,但是结果是“ rank = same”现在从底部到顶部。
一个最小的示例显示了问题:
controller.destroy()
我想要的结果是从上到下:rank1,A,B,C。
我得到的结果是从上到下:C,B,A,rank1 ---如下图所示。
我该如何找回正确的订单?
鉴于我的图表的大小,选项2的工作量太大,收益却很小。还有其他选择吗?
编辑:marapet给出的答案可以满足我的大部分要求。但是,该解决方案不适用于以下最小问题:
digraph graph {
graph [
rankdir=LR;
nodesep = "0.5 equally",
newrank = true;
];
/* Guide Nodes */
rank1 [style=dotted];
rank2 [style=dotted];
rank1 -> rank2 [style=dotted];
/* Node Clusters */
subgraph cluster1 {
A;
B;
C;
}
/* Node Hierarchy */
A -> Z;
B -> Z;
C -> Z;
/* Node Rank */
{ rank=same;
rank1 -> A -> B -> C [style=dotted];
}
} /* Closes the digraph */
这将产生以下图片:
我只能得出结论,我遇到的问题是由于在同一等级的边缘中混合了群集和非群集而造成的。
答案 0 :(得分:1)
对于相同等级的边缘,您可以使用rank=same
来代替constraint=false
:
/* Node Rank */
rank1 -> A -> B -> C [style=dotted, constraint=false];
还应更改节点(引导节点和节点群集)的出现顺序:
digraph g {
graph [
rankdir=LR;
nodesep = "0.5 equally",
newrank = true;
];
/* Node Clusters */
subgraph cluster1 {
A;
B;
C;
}
/* Guide Nodes */
rank1 [style=dotted];
rank2 [style=dotted];
rank1 -> rank2 [style=dotted];
/* Node Hierarchy */
A -> Z;
B -> Z;
C -> Z;
/* Node Rank */
rank1 -> A -> B -> C [style=dotted, constraint=false];
}
通常,对于LR布局,它有助于自上而下地布置图形并想象其逆时针旋转90度。
答案 1 :(得分:1)
要在问题中编辑的小扩展名。 在编辑中,使用了单独的节点'p',将其打包在子图中会产生更好的结果,尤其是在将颜色设置为白色时:
subgraph cluster3 {
P;
graph[color=white];
}
我的输出中唯一奇怪的是,'C'和'P'/之间有2条虚线/ 玩'dir = back'提供了解决方案。 完整的代码:
digraph g {
graph [
rankdir=LR;
nodesep = "0.5 equally",
newrank = true;
];
/* Node Clusters */
subgraph cluster1 {
subgraph cluster2 {
A;
B;
C;
}
subgraph cluster3 {
P;
graph[color=white];
}
subgraph cluster4 {
D;
E;
F;
}
Z;
}
/* Guide Nodes */
rank1 [style=dotted];
rank2 [style=dotted];
/* Guide Nodes Hierarchy */
rank1 -> rank2 [style=dotted];
/* Node Hierarchy */
A -> Z;
B -> Z;
C -> Z;
P -> Z;
D -> Z;
E -> Z;
F -> Z;
/* Rank Constraints */
rank1 -> A -> B -> C [style=dotted, constraint=false];
D -> E -> F [style=dotted, constraint=false];
P -> C [dir=back, style=dotted, constraint=false];
P -> D [style=dotted, constraint=false];
} /* Closes the digraph */