Graphviz实现严格左右流向边(仅从节点左侧入、右侧出)的配置方法咨询
Graphviz实现严格左右流向边(仅从节点左侧入、右侧出)的配置方法咨询
嗨,这个需求其实用Graphviz的**端口(port)**和边的属性就能轻松搞定!我帮你调整了DOT代码,完美实现你想要的效果:
首先是实现弯曲弧的版本,完全符合你说的“从C1右侧出,绕回B0左侧入”的要求:
digraph net { rankdir="LR" # 保持从左到右的布局方向 splines="curved" # 让边自动生成弯曲样式,避免直线交叉 "C0" [shape=oval label="C0"] "C1" [shape=oval label="C1"] "B0" [shape=box label="B0"] # 常规边默认会遵循左入右出的逻辑,不用额外配置 "C0" -> "B0" "B0" -> "C1" # 关键配置:强制边从C1右侧出发,进入B0左侧 "C1":e -> "B0":w [minlen=2] # minlen给边留够弯曲空间,避免太紧凑 }
要是你想要更规整的直角矩形弧,只需要把splines属性改成polyline就行,代码如下:
digraph net { rankdir="LR" splines="polyline" # 生成直角折线式的边 "C0" [shape=oval label="C0"] "C1" [shape=oval label="C1"] "B0" [shape=box label="B0"] "C0" -> "B0" "B0" -> "C1" "C1":e -> "B0":w [minlen=2] }
给你拆解下核心逻辑:
:e和:w是节点的端口标记,e对应右侧(East),w对应左侧(West),强制边严格按照你要的方向进出节点splines属性控制边的样式,curved是平滑弯曲,polyline是直角折线,按需选择就行minlen=2是给边设置最小长度,确保弯曲/折线有足够空间展示,不会挤成一团
如果自动布局的位置你觉得不满意,还可以手动用pos属性指定边的控制点,但一般默认的自动布局已经能满足需求啦~
备注:内容来源于stack exchange,提问作者R71
相关产品推荐
相关产品推荐

