如何使用Graphviz使<、>节点与绿色集群边界贴合并接触?
解决方案
完全可以实现你要的效果,核心是去掉会产生额外间距的冗余子图,调整节点布局逻辑,以下是修改后的代码:
digraph G{ graph [ rankdir=LR ranksep = 0 nodesep=0 ]; node [shape=box, margin="0,0"]; // 定义三个核心节点 3 [label=">", color=blue]; 1 [label="P", color=black]; 2 [label="<", color=red]; // 用不可见边固定左到右的顺序:> → P → < edge [style=invis]; 3 -> 1 -> 2; // 给P节点加绿色边框的分组框,替代原来的cluster_1 subgraph cluster_b2b { label="b2b_domain"; color=green; margin=0; // 消除分组框的内边距 1; } // 外层总分组框 subgraph cluster_pd { label="pd_b2bc_cntl"; margin=0; 3; cluster_b2b; 2; } }
关键调整说明:
- 删掉了包裹单个节点的子图(原来的cluster_2、cluster_3),这类子图默认自带内边距,会强行拉开节点和绿色块的距离。
- 直接定义三个节点,通过
nodesep=0和节点margin=0彻底消除节点间的空隙,再用不可见边固定排列顺序,保证蓝色>在左、绿色框的P在中间、红色<在右。 - 给P节点单独设置绿色边框的分组框,同时把分组框的
margin=0,让绿色框和P节点完全贴合,也能和左右的符号节点无缝接触。 - 外层总分组框同样设置
margin=0,避免外层产生额外空白。
生成的图会完全符合你的需求:蓝色>紧贴绿色"b2b_domain"框的左侧,红色<紧贴绿色框的右侧,三者完全接触无空隙,外层是标注"pd_b2bc_cntl"的总框。
内容的提问来源于stack exchange,提问作者Guy Bar
相关产品推荐
相关产品推荐

