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

Matplotlib quiver绘图箭头方向异常及箭头大小调整问题

问题根源

matplotlib.axes.Axes.quiver的入参不是起点、终点坐标,其核心参数定义为:

  • X, Y:箭头起点的x、y坐标
  • U, V:箭头在x方向、y方向的位移分量,而非终点绝对坐标

原代码直接将终点坐标传入U、V位置,会导致矢量分量计算完全错误。例如定义的线段[(1, 0), (1, -1)],原代码传参等价于起点(1,0)、x方向位移1、y方向位移-1,实际渲染终点为(2,-1),和预期的(1,-1)不符,方向自然错误。

解决方案

坐标修正

传入参数前先通过终点坐标减起点坐标,计算真实的位移分量U、V:
U = 终点x坐标 - 起点x坐标
V = 终点y坐标 - 起点y坐标
同时需要指定angles='xy'、scale_units='xy'、scale=1,保证箭头方向、长度和坐标轴坐标尺度完全对齐。

箭头尺寸调整

通过以下常用参数控制箭头大小样式:

  • scale:数值越大箭头整体长度越短,设置为1时1单位矢量长度对应坐标轴1单位实际长度
  • width:箭杆的宽度,数值越大箭杆越粗
  • headwidth:箭头头部宽度与箭杆宽度的比值,默认值为3
  • headlength:箭头头部长度与箭杆宽度的比值,默认值为5
修正后代码
import matplotlib.pyplot as plt
# 定义箭头的起点、终点坐标对
I4 = [[(0, 0), (1, 0)], [(0, 0), (0, -1)], [(1, 0), (1, -1)], [(0, -1), (1, -1)]]
fig, ax = plt.subplots(figsize=(5, 5))
for start, end in I4:
    x0, y0 = start
    x1, y1 = end
    u = x1 - x0
    v = y1 - y0
    ax.quiver(
        x0, y0, u, v,
        angles='xy', scale_units='xy', scale=1,
        width=0.015  # 可调整该值修改箭杆粗细
    )
# 调整坐标轴范围,避免箭头被截断
ax.set_xlim(-0.2, 1.2)
ax.set_ylim(-1.2, 0.2)
plt.show()

运行后四个箭头会完全按照定义的路径渲染,组成开口向上的正方形三边,方向和位置完全符合预期。需要调整箭头大小时,直接修改上述提到的尺寸参数即可。

quiver绘图异常效果截图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 02:27:31