Matplotlib/Basemap 等距绘制风刺

Matplotlib/Basemap plotting wind barbs at equal distances apart

我正在尝试绘制彼此间隔 100 公里乘 100 公里的风倒钩。我拥有的数据适用于北半球(0.25 度)。我试图在下面的代码中重现该问题:

import numpy as np
from mpl_toolkits.basemap import Basemap

lons,lats = np.meshgrid(np.linspace(-180,180,1440),np.linspace(0,90,360))


m = Basemap(projection='merc',resolution='l',llcrnrlat=33,llcrnrlon=-50,urcrnrlat=68,urcrnrlon=40)
m.drawcoastlines(linewidth=0.6)
X, Y = m(lons,lats)

UWind = np.ones((360,1440))
VWind = np.zeros((360,1440))

xx = np.arange(0, X.shape[1], 8)

yy = np.sin(np.deg2rad(np.linspace(0,90,45)))
yy = yy*360
yy[-1] = 359
yy = yy.astype(int)

points = np.meshgrid(yy, xx)

m.barbs(X[points], Y[points], UWind[points], VWind[points],length=4,linewidth=0.6,pivot='middle')


plt.show()

xx 被选择为每 2 度绘制一个倒钩(8 个框,分辨率为 0.25 度)。当然,在这个投影中,纬度间距会随着纬度的增加而增加。因此,为了避免这种情况,我创建了随罪恶变化的 yy (以抵消这一点)。它似乎没有做任何事情。非常欢迎任何帮助。这产生的当前图不是等间距的(从距离,而不是角度,透视)。

替换 m.barbs 并在其上方添加新行:

uproj,vproj,xx,yy = m.transform_vector(UWind,VWind,np.linspace(-180,180,1440),np.linspace(0,90,360),31,31,returnxy=True,masked=True)
m.barbs(xx,yy,uproj,vproj,length=4,linewidth=0.6,pivot='middle')

参考:https://matplotlib.org/basemap/users/examples.html

这里有更多信息:https://matplotlib.org/basemap/api/basemap_api.html#module-mpl_toolkits.basemap