Python使用matplotlib quiver绘制随机选取二维矢量场矢量报错问询
问题原因
matplotlib.pyplot.quiver的标准传参规则为quiver(X, Y, U, V),其中X为所有采样点的x坐标数组、Y为所有采样点的y坐标数组、U为对应位置矢量的x分量数组、V为对应位置矢量的y分量数组,四个参数的长度必须完全匹配。- 第一次调用
plt.quiver(xm,vectors[:,0],vectors[:,1])时,你传入的第一个参数xm是形状为(M, 2)的二维数组,包含了所有点的x、y坐标,matplotlib会错误将其解析为总长度为2*M的X坐标序列,后续U、V长度均为M,因此触发维度不匹配报错。 - 第二次修改后的写法把
[xm[:,0],xm[:,1]]作为第一个参数,本质还是将x、y坐标合并成了长度为2*M的数组,仍然不符合参数要求。
解决方案
将采样点的x、y坐标拆分后作为前两个独立参数传入quiver即可,修正后的调用代码为:
plt.quiver(xm[:, 0], xm[:, 1], vectors[:, 0], vectors[:, 1]) # 如需显示图像可补充调用plt.show() plt.show()
可选优化
原代码中的循环采样部分可以用numpy向量化操作简化,提升运行效率:
M = 10 # 直接批量生成M个随机采样点,形状为(M, 2) xm = rn.uniform(-L, L, size=(M, 2)) # 批量计算所有采样点的矢量值 vectors = np.apply_along_axis(lambda pos: dipole(pos[0], pos[1]), 1, xm)
内容的提问来源于stack exchange,提问作者Valentina
相关产品推荐
相关产品推荐

