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

使用plt.quiver设置angles参数时向量变形/不对齐问题求助

解决plt.quiver向量与网格对齐及变形问题

你的问题核心是坐标轴视觉比例不匹配,加上quiver参数配合不当,导致向量要么变形、要么和网格不对齐,下面直接给出解决方案:

问题根源

你设置的画布尺寸是(5,10),但x、y轴的数据范围都是-3到3,这使得x轴的视觉单位长度和y轴不一致,直接干扰了quiver向量的显示效果。另外angles参数的特性没和坐标轴设置配合好,才出现警告和对齐问题。

解决步骤

1. 强制坐标轴单位长度一致

给每个子图添加ax.set_aspect('equal'),让x、y轴的视觉单位长度相等,这是解决所有显示问题的核心。

2. 匹配quiver参数

  • 使用angles="xy"时:搭配scale=1, scale_units='xy',让向量长度直接对应数据坐标数值,同时消除除以极小值的运行警告。
  • 使用angles="uv"时:只要坐标轴比例一致,向量自然会和网格对齐。

修改后的完整代码

import matplotlib.pyplot as plt
import numpy as np

v1 = np.array([[2],[2]])
V = 0
U = 0

fig = plt.figure(figsize=(5,10))
ax1 = plt.subplot(2,1,1)
# angles="xy"的正确配置
ax1.quiver(V, U, v1[0], v1[1], scale=1, scale_units='xy', angles="xy")
ax1.set_ylim(-3,3)
ax1.set_xlim(-3,3)
ax1.set_aspect('equal')  # 关键:强制坐标轴比例一致
ax1.grid()

ax2 = plt.subplot(2,1,2)
# angles="uv"的正确配置
ax2.quiver(V, U, v1[0], v1[1], scale=1, scale_units='xy', angles="uv")
ax2.set_ylim(-3,3)
ax2.set_xlim(-3,3)
ax2.set_aspect('equal')  # 关键:强制坐标轴比例一致
ax2.grid()

plt.show()

补充说明两个angles参数的差异

  • angles="xy":基于数据坐标(x,y)计算向量角度,适合需要向量严格对应数据方向的场景,必须配合set_aspect('equal')才能避免视觉变形。
  • angles="uv":基于向量的u、v分量计算角度(默认对应屏幕坐标),只有当坐标轴比例一致时,才会和数据网格对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:05:18