我有一个经度和压力水平在垂直方向上的matplotlib Contourf图。我正在尝试使用matplotlib中的plt.streamplot函数并使用U和V wind数据绘制流线图。 如果仅绘制流图,则可以正常工作。但是我无法使流线叠加在轮廓图上。 这是我的代码:-
fig, axes = plt.subplots(nrows, ncols, sharex=True, sharey=True)
if (nrows==1 and ncols==1):
axes=[axes]
else:
axes=axes.flat
for i, ax in enumerate(axes):
X,Y = np.meshgrid(x[i],y[i])
levels=np.arange(vmin,vmax,step)
h = ax.contourf(X,Y,z[i],cmap=cmap,levels=levels,extend='both')
w = ax.streamplot(X, Y, W[i], Z[i], linewidth=0.2, color='gray')
这是我得到的情节:
以下是流线图,不确定为什么y轴是从0-120而不是0到1000:
答案 0 :(得分:1)
对于轮廓图(lat-p)使用曲线坐标系。 您必须将u,v转换为轮廓坐标系,如下所示(这是latlon的示例,您必须对其进行修改以使用压力水平):
def myStreamPlot(lon,lat,u,v,color='k',density=2.5):
from scipy.interpolate import griddata
n,m = u.shape[1],u.shape[0]
x = np.linspace(np.nanmin(lon), np.nanmax(lon), n)
y = np.linspace(np.nanmin(lat), np.nanmax(lat), m)
xi, yi = np.meshgrid(x,y)
lon = lon.ravel()
lat = lat.ravel()
u = u.ravel()
v = v.ravel()
gu = griddata(zip(lon,lat), u, (xi,yi))
gv = griddata(zip(lon,lat), v, (xi,yi))
gspd = np.sqrt(gu**2 + gv**2)
SL = plt.streamplot(x,y,gu,gv,linewidth=1.,color=color,density=density)
此代码使用griddata
的{{1}}函数:https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html