Basemap not plotting to left of 0 degrees longitude

1k views Asked by At

I'm reasonably new to Python, and I'm trying to plot long-term mean rainfall data for the African continent. I have various NetCDF files, which have already been cut to just contain the long term mean value - I just need to plot it. My issue is that the data is only plotting to the right of the 0 degree longitude line. I gather this is due to Basemap wanting -180 to 180 coordinates, and my data is 0 to 360. However, nothing I've tried seems to work.

Here's the code (which gives the correct plot, just cut off to the left of 0 degrees):

nc = Dataset(GISS-E2-H_MAM_plots.nc)

prcp = nc.variables['pr'][0,:,:]
pr = 86400*prcp[:]
lon=nc.variables['lon']
lat=nc.variables['lat']
[lonall, latall] = np.meshgrid(lon, lat)
fig = plt.figure()
m = Basemap(projection='cyl', llcrnrlat=-25, urcrnrlat=15, llcrnrlon=-20, urcrnrlon=60)
m.drawcoastlines()
m.drawcountries()
m.drawparallels(np.arange(-90.,90.,10.), labels = [1,0,0,0], fontsize = 10)
m.drawmeridians(np.arange(-180., 180., 10.), labels = [0,0,0,1], fontsize = 10)
levels=np.arange(2, 11.6, 0.8)
mymapf = plt.contourf(lonall, latall, pr, levels, cmap=plt.cm.gist_rainbow_r)

I've tried to shift the data by 180 using the following, and then np.roll to move it all along.

lonall= lonall-180
nlon=len(lonall)
pr=np.roll(pr, nlon/2, axis=1)

This worked for a colleague in a similar instance, but hasn't worked for me. Any help would be greatly appreciated!

1

There are 1 answers

0
drg On BEST ANSWER

I think the problem is that you don't have [:] after you read in latitude and longitude. I.e. change the above lines to:

lon=nc.variables['lon'][:]

lat=nc.variables['lat'][:]

Also, you don't need the brackets around [lonall,latall]