使用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
相关产品推荐
相关产品推荐

