Matplotlib Quiver绘图异常:向量未从原点出发及显示与定义不符的问题排查与解决
解决Matplotlib Quiver向量绘图的两个常见问题
嘿,这两个问题其实都是对Matplotlib的quiver()函数参数理解偏差导致的,很容易踩坑,我来帮你拆解清楚!
问题1:为什么向量没有从原点(0,0)出发?如何修复?
你之所以遇到这个问题,核心是搞反了quiver()的参数逻辑:plt.quiver()的前两个参数是向量的起点坐标,而非向量本身的分量。
你之前的代码里,v1 = np.array([6,8])和x = np.array([6,0])被当作了两个向量的起点x、y坐标——第一个向量的起点是(6,6),第二个是(8,0),自然不会从原点出发。
要让两个向量都从原点出发,你需要把前两个参数设置为包含两个原点坐标的数组(对应两个向量的起点),也就是[0, 0]和[0, 0],然后再传入向量的分量作为后续参数。
问题2:显示的向量与定义不符,为什么?该如何修复?
同样是参数顺序的问题!quiver()的基础参数结构是:
plt.quiver(X, Y, U, V, ...)
其中:
X, Y:所有向量的起点x、y坐标数组U, V:所有向量的x分量、y分量数组
你之前只传了X=v1和Y=x,没有指定U和V,Matplotlib会默认使用默认值(或自动缩放生成错误分量),导致显示的向量和你定义的完全不一致。
完整修复后的代码
下面是修正后的代码,不仅让向量从原点出发,还能准确显示你定义的两个向量:
import numpy as np import matplotlib.pyplot as plt v1 = np.array([6, 8]) x = np.array([6, 0]) # 两个向量的起点都是(0,0),所以X、Y传入[0, 0] # U是两个向量的x分量,V是两个向量的y分量 plt.quiver([0, 0], [0, 0], [v1[0], x[0]], [v1[1], x[1]], angles='xy', scale_units='xy', scale=1) plt.xlim(-1, 10) plt.ylim(-1, 10) plt.grid(True) # 新增网格,更直观查看坐标 plt.show()
运行这段代码后,你就能看到从原点出发的两个向量:一个是(6,8),另一个是(6,0),完全符合你的定义。
内容的提问来源于stack exchange,提问作者user3668129
相关产品推荐
相关产品推荐

