Построение линий на контуре Matplotlib - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть контурный график matplotlib для долгот и уровней давления по вертикали.Я пытаюсь построить обтекаемые линии, используя функцию plt.streamplot в matplotlib и используя данные ветра U и V.Если я строю только стримплот, он работает нормально.Но я не могу заставить линии наложения накладываться на контурный график.Вот мой код: -

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')

И вот этот график, который я получаю:

And this is the plot I get

Ниже приведен упрощенный график, не знаю, почему уось от 0-120 вместо 0 до 1000:

This is the streamline plot, not sure why the y axis is from 0-120 instead of 0 to 1000

1 Ответ

0 голосов
/ 14 февраля 2019

Вы используете криволинейную систему координат для контурного графика (lat-p).Вы должны преобразовать u, v в систему координат контура, как здесь (это пример для последнего, вы должны изменить его, чтобы использовать уровни давления):

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из scipy.interpolate: https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.griddata.html

...