Сдвиг сетки с помощью matplotlib

Я рисую данные в формате от 0 до 360 градусов. Я пытаюсь построить это на проекции cyl или merc, но она показывает данные только от 0 и далее (я хочу построить данные с GMT в центре, поэтому мне нужны данные на длинной сетке от -180 до 180) . Если я сдвину сетку (lon = lon -180), то все данные будут показаны, но данные будут не в том месте на -180 градусов.

Проблема:

введите здесь описание изображения

Хотя в ортопроекции работает нормально. Соответствующий код ниже.

lat = np.linspace(90,-90,721)
lon = np.linspace(0,360,1440) 
m = Basemap(projection='cyl',llcrnrlat=-90,urcrnrlat=90,llcrnrlon=0,urcrnrlon=360,resolution='c',)
X, Y = np.meshgrid(lon, lat)
X, Y = m(X, Y)
cs = m.contourf(X,Y,Plot,scale, cmap=cmap)

person J W    schedule 24.07.2016    source источник


Ответы (2)


Пожалуйста попробуйте:

import numpy as np
from mpl_toolkits.basemap import shiftgrid
from mpl_toolkits.basemap import Basemap

lat = np.linspace(-90, 90, 721)
lon = np.linspace(0, 360, 1440)
Plot, lon = shiftgrid(180., Plot, lon, start=False)  # shiftgrid
m = Basemap(projection='cyl', llcrnrlat=-90, urcrnrlat=90, llcrnrlon=-180, urcrnrlon=180, resolution='c',)
X, Y = np.meshgrid(lon, lat)
X, Y = m(X, Y)
cs = m.contourf(X, Y, Plot, scale, cmap=cmap)

shiftgrid: смещает глобальную сетку широты/долготы на восток или запад.

person marcelorodrigues    schedule 01.09.2016

У меня есть решение (хотя и уродливое). Путем переупорядочения данных.

temp = np.zeros((721,1440))
temp[:,0:720] = Plot[:,720:1440]
temp[:,720:1440] = Plot[:,0:720]    
Plot[:]=temp[:]

Или с помощью np.roll (если вы знаете, сколько точек сетки нужно сместить)

person J W    schedule 24.07.2016