调整Dot布局:交换work组与main组的左右位置
调整Graphviz Dot布局:将work节点组移至右侧
我有如下Dot布局代码:
digraph { subgraph { rank=same; node [shape=plain] work node [shape=rectangle,group=work] w2 } subgraph { rank=same; node [shape=plain] main node [shape=rectangle,group=main] m3 } node [shape=rectangle,group=work] w1 node [shape=rectangle,group=main] m1 m2 edge [arrowhead=open] m2 -> m1 m3 -> m2 w1 -> m1 w2 -> w1 m3 -> w2 edge [style=dashed] main -> m3 work -> w2 }
当前生成的图中,work标签及w1、w2节点组位于左侧,我希望将它们移至右侧,调整节点和子图顺序后未达到预期效果,寻求解决方法。
解决方法
通过添加隐形约束边指定main与work节点的左右位置关系,同时不破坏原有节点的上下层级。修改后的代码如下:
digraph { # 先定义main子图,优先处理左侧布局 subgraph { rank=same; node [shape=plain] main node [shape=rectangle,group=main] m3 } subgraph { rank=same; node [shape=plain] work node [shape=rectangle,group=work] w2 } node [shape=rectangle,group=main] m1 m2 node [shape=rectangle,group=work] w1 # 隐形边强制main在work左侧,constraint=false不影响节点上下排名 main -> work [style=invis, constraint=false] edge [arrowhead=open] m2 -> m1 m3 -> m2 w1 -> m1 w2 -> w1 m3 -> w2 edge [style=dashed] main -> m3 work -> w2 }
原理说明
- 先定义main子图,让Dot优先完成左侧节点组的布局
- 隐形边
main -> work [style=invis, constraint=false]仅用于调整左右位置,constraint=false保证不会改变原有节点的上下层级关系 - 保留所有业务逻辑的连线和节点分组,确保图的语义不变
内容的提问来源于stack exchange,提问作者Damien Cassou
相关产品推荐
相关产品推荐

