底图不绘制到0度经度的左边

时间:2015-06-10 09:26:00

标签: python shift matplotlib-basemap

我是Python的新手,我试图绘制非洲大陆的长期平均降雨量数据。我有各种NetCDF文件,它们已被剪切为仅包含长期平均值 - 我只需要绘制它。 我的问题是数据只绘制在0度经度线的右侧。我收集这是因为Basemap想要-180到180坐标,我的数据是0到360.但是,我尝试过的任何东西似乎都没有用。

这里是代码(给出了正确的情节,只是在0度的左边切断):

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)

我尝试使用以下内容将数据移动180,然后使用np.roll将其全部移动。

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

这在一个类似的例子中对一位同事起作用,但对我来说并不起作用。 任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

我认为问题在于你在读经纬度后没有[:]。即将上述行更改为:

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

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

此外,您不需要[lonall,latall]

周围的括号