J W
J W

Reputation: 637

Shifting grid with matplotlib

I'm plotting data which is formatted between 0 and 360 degrees. I'm trying to plot this on cyl or merc projection, but it is only showing data from 0 onwards (I want to plot the data with the GMT in the center, so need the data on a lon grid of -180 to 180). If I shift the grid (lon = lon -180) then all data shows, but the data is in the wrong place by -180 degrees.

Issue:

enter image description here

Works fine in ortho projection though. Relevant code below.

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)

Upvotes: 4

Views: 4755

Answers (2)

J W
J W

Reputation: 637

I have a solution (albeit an ugly one). By reordering the data.

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

Or by using np.roll (if you know how many gridpoints to shift)

Upvotes: 1

marcelorodrigues
marcelorodrigues

Reputation: 1039

Please Try:

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: shifts global lat/lon grids east or west.

Upvotes: 4

Related Questions