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
我正在尝试绘制彼此间隔 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