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

如何使用matplotlib/seaborn将直线转为曲线以区分两点间重叠线段

解决matplotlib/seaborn绘制多条同起点终点线段重叠的方案

你需要的效果可以通过matplotlib的patches.FancyArrowPatch接口实现,这个接口支持自定义连线的弯曲弧度,完美适配区分多条同端点线段的场景。

原直线绘制效果图
曲线调整后绘制效果图

实现思路

  • 固定其中1条线段为直线,剩下的2条线段分别设置不同方向的弯曲弧度,避免三条线完全重叠
  • 通过connectionstyle参数控制弧度大小和方向,数值越大弯曲程度越高,正负值控制弯曲方向

可运行代码示例

import matplotlib.pyplot as plt
from matplotlib.patches import FancyArrowPatch

# 定义A、B两点坐标,可替换为自己的实际坐标
point_a = (0, 0)
point_b = (1, 1)

fig, ax = plt.subplots(figsize=(5,5))

# 绘制第一条无弯曲的直线
line1 = FancyArrowPatch(point_a, point_b, arrowstyle='-', color='blue', linewidth=2)
ax.add_patch(line1)

# 绘制第二条曲线,向左弯曲,弧度设为0.3
line2 = FancyArrowPatch(point_a, point_b, arrowstyle='-', color='orange', linewidth=2,
                        connectionstyle='arc3,rad=0.3')
ax.add_patch(line2)

# 绘制第三条曲线,向右弯曲,弧度设为-0.3
line3 = FancyArrowPatch(point_a, point_b, arrowstyle='-', color='green', linewidth=2,
                        connectionstyle='arc3,rad=-0.3')
ax.add_patch(line3)

# 调整坐标轴范围适配坐标
ax.set_xlim(-0.1, 1.1)
ax.set_ylim(-0.1, 1.1)
plt.show()

额外说明

  • 如果使用seaborn绘图,可以直接在seaborn生成的坐标轴对象上调用add_patch()方法添加上述曲线,不需要调整seaborn原有样式
  • 弧度值可以根据线段数量、坐标范围灵活调整,只要保证不同线段的rad参数不同,就可以避免重叠
  • 如果需要带箭头的连线,把arrowstyle参数改成'->'即可,还可以自定义调整箭头大小、样式等参数

内容的提问来源于stack exchange,提问作者Clare L

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:06:01