Graphviz如何设置让边的len属性从节点边界而非中心开始计算?
目前Graphviz没有原生支持边长度从节点边界计算的配置项,你观察到的现象确实是因为len属性的计算基准是节点中心,节点尺寸变大后,边界之间的可视边长就会被压缩,可以用以下几种方案解决:
- 手动调整len值补偿节点尺寸
直接根据你的节点实际宽度把len值调大即可,你当前的场景可以把len从3调整为4~5,测试到视觉上的边长度符合预期即可,该方案不需要修改其他配置,适配成本最低。 - 使用ranksep控制层级间距
dot默认的层级布局中,ranksep属性本身就是定义相邻层级节点边界之间的最小间距,不需要单独给边设置len。直接在图的全局配置中添加ranksep=2(数值根据你的需求调整)即可统一控制层级间的空白距离,更适合多层级的结构图场景。 - 插入不可见垫片节点
非层级布局场景下可以在边的两端节点之间插入不可见的虚拟节点,把原边拆为两段来实现边界间距可控。示例代码如下:digraph { node [ style="filled, rounded" fontname="Lato" margin=0.2 ] A [ label="Ban điều hành" shape="doubleoctagon" fillcolor="#f4f1de" fontcolor="#000000" ] node [ shape="plaintext" fillcolor="#81b29a" fontcolor="#000000" ] B1 [ label="Phát triển cộng đồng" ] B2 [ label="Nội dung" ] B3 [ label="Quản lý hệ thống" ] // 定义不可见垫片节点 dummy [shape=point width=0 height=0 style=invis label=""] A -> dummy [len=3 arrowhead=none] dummy -> {B1,B2,B3} [len=0]
}
- 搭配minlen属性使用 可以给边设置`minlen`属性控制两个节点之间的最小层级差,比如`A -> {B1,B2,B3} [minlen=2]`,也可以实现拉开节点间距的效果。 内容的提问来源于stack exchange,提问作者Ooker
相关产品推荐
相关产品推荐

