首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在matplotlib contourf图上绘制流线

在matplotlib contourf图上绘制流线
EN

Stack Overflow用户
提问于 2019-02-14 08:57:50
回答 1查看 608关注 0票数 2

我有一张matplotlib等值线图,上面是经度和垂直方向的压强。我正在尝试使用matplotlib中的plt.streamplot函数并使用U和V风数据来绘制流线。如果我只绘制streamplot,它工作得很好。但是我不能把流线叠加到等高线上。以下是我的代码:

代码语言:javascript
复制
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:

EN

回答 1

Stack Overflow用户

发布于 2019-02-14 12:40:26

使用曲线坐标系绘制等高线(lat-p)。你必须将u,v转换为等高线的坐标系,就像这样(这是后面的例子,你必须修改它以使用压力水平):

代码语言:javascript
复制
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)

此代码使用scipy.interpolategriddata函数:https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54681711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档