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

使用Matplotlib绘制风场:Quiver风矢量与流线不平行问题

问题:Matplotlib中quiver与streamplot风场方向不匹配

使用Matplotlib的quiver函数绘制二维风矢量图时,发现风矢量和streamplot生成的流线不平行,但两者调用时使用了相同的V、W等速度场参数。

相关代码:

fig = plt.figure(figsize=(10,10)) 
plt.rcParams.update({'font.size':16})
plt.rcParams['contour.negative_linestyle'] = 'solid'
plt.title('Streamfunction')
jk = 15
q = plt.quiver(Y[::jk,::jk],Z[::jk,::jk],V[::jk,::jk],W[::jk,::jk],scale=50)
plt.streamplot(Y,Z,V,W,density = 3,arrowstyle='->',arrowsize = 1.5)
plt.xlabel("Y axis")
plt.ylabel("Height")
plt.xlim([-5000,5000])
#plt.ylim([1000,10000])
plt.show()

原因分析

这是因为quiver默认会根据坐标轴的显示比例自动调整矢量角度,当X轴(Y轴)和Y轴(Height)的数值范围差异较大时(比如Y轴跨度10000,高度轴跨度也达数倍),矢量方向会被坐标轴的不等比例拉伸,导致视觉上和streamplot的流线方向不一致——而streamplot是严格基于输入的速度场数据计算流线方向的,不受坐标轴缩放影响。

解决方法

在quiver调用中添加angles='xy'和scale_units='xy'参数,强制矢量的角度和缩放基于数据坐标,而非显示坐标:

q = plt.quiver(Y[::jk,::jk], Z[::jk,::jk], V[::jk,::jk], W[::jk,::jk], scale=50, angles='xy', scale_units='xy')

参数说明

  • angles='xy':指定矢量的角度直接由数据坐标中的(V,W)计算,不随坐标轴显示比例调整
  • scale_units='xy':让矢量的缩放因子单位与数据坐标一致,保证长度和方向的准确性

另一种可选方案是设置坐标轴等比例显示:

plt.axis('equal')

但这种方式可能会导致图表显示变形,需根据实际需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 23:45:40