Graphviz不同层级节点顺序强制 如何让f→c边从b、g节点间穿过
Graphviz边路径引导解决方案
核心思路是通过添加不可见虚拟节点预留b、g之间的空隙,再拆分目标边穿过该空隙,完全满足你的两个要求:
修改后的完整代码
digraph { stylesheet = "..." subgraph cluster { b; c; g; // 新增b、g之间的不可见虚拟节点,预留空隙 dummy [style=invis, width=0, height=0, margin=0] {rank=same; b; dummy; g;} // 不可见边固定b、dummy、g的相对顺序,避免乱序 b -> dummy [style=invis] dummy -> g [style=invis] } a -> b; b -> c; c -> d; c -> e; // 拆分f->c为两段,穿过虚拟节点,设为无约束不干扰整体布局 f -> dummy [constraint=false, arrowhead=none] dummy -> c [constraint=false] {rank=same; a; f;} }
关键修改说明
- 所有原有节点的位置归属没有调整,b和g全程保留在cluster边框内,符合第一个要求
- 新增的dummy节点完全不可见,仅用来预留路径,g会固定在b的同一行最右侧,不会干扰主路径a->b->c->d/e的布局,符合第二个要求
- 拆分后的两段边拼接后视觉上就是完整的f->c边,刚好从b和g的中间位置穿过,路径完全可控
- 所有新增的边和节点都加了
constraint=false或不可见属性,不会改变原有其他节点的相对位置
内容的提问来源于stack exchange,提问作者Dimpl
相关产品推荐
相关产品推荐

