如何在Graphviz中实现g、p、c节点的g-p-c顺序排列?
让Graphviz中
p节点位于g和c节点中间的布局方案 要让p节点精准处于g和c节点中间,你可以通过强制节点排列顺序的方式实现,以下是两种可行的修改方案:
方案一:使用ordering=out控制顺序
digraph { { rank = same; ordering=out; // 强制按节点连接顺序排列 g -> p; p -> c; // 保留原有业务边 g -> c; c -> p; } subgraph global { g -> ga -> g; } subgraph command { c -> ca -> c; } }
方案二:添加不可见边固定位置
如果不想依赖ordering属性,也可以通过添加不可见边来强制节点顺序:
digraph { { rank = same; g -> p -> c [style=invis]; // 不可见边用于锁定排列顺序 // 保留原有业务边 g -> p; g -> c; c -> p; } subgraph global { g -> ga -> g; } subgraph command { c -> ca -> c; } }
原理说明
rank=same确保三个节点处于同一层级(默认横向布局下为同一水平线)ordering=out会让Graphviz按照你定义节点连接的顺序来排列节点,从而让p处于g和c之间- 不可见边
style=invis的作用是在不显示边的前提下,告诉布局引擎节点的排列优先级,同样能实现居中效果 - 原有业务边的箭头方向不会干扰这个布局逻辑,只需要保证顺序控制的规则生效即可
内容的提问来源于stack exchange,提问作者user22608671
相关产品推荐
相关产品推荐

