You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 17:22:19