如何在GraphViz中让两个圆形节点相切?
让两个圆形节点相切的Graphviz实现方法
你之前混淆了ranksep和nodesep的作用:ranksep是控制不同层级(rank)之间的间距,而同一rank内节点的间距由nodesep控制。要实现两个圆形节点相切,只需要针对目标节点局部设置nodesep=0即可,不会影响其他节点。
方法一:用子图局部控制间距
通过子图将需要相切的节点归为同一rank,并设置子图内的nodesep=0,既保证节点在同一水平/垂直线上,又让它们边缘紧贴:
graph [rankdir=LR]; // 子图内的节点设置为同一rank,且间距为0 subgraph { nodesep=0; rank=same; a [shape=circle]; b [shape=circle]; } x [shape=rect]; x -> a; y [shape=rect]; y -> a; }
方法二:直接指定节点坐标(适合固定大小的节点)
如果节点大小固定,可以通过pos属性手动设置坐标,让两个节点的边缘刚好接触。比如默认圆形节点的半径约为0.5,将两个节点的x坐标相差1(半径之和)即可:
graph [rankdir=LR]; a [shape=circle, pos="0,0!"]; b [shape=circle, pos="1,0!"]; x [shape=rect]; x -> a; y [shape=rect]; y -> a; }
第一种方法更灵活,节点大小变化时无需手动调整,推荐使用。
内容的提问来源于stack exchange,提问作者Gino
相关产品推荐
相关产品推荐

