Python底图:使用shadedrelief,bluemarble或etopo时出错(错误的经度格式?)

时间:2016-07-07 10:47:13

标签: python matplotlib matplotlib-basemap

我想绘制一个以太平洋为中心的南半球地图,并用python matplotlib底图绘制一些东西。

除非我尝试使用底图例程shadedrelief,bluemarble或etopo绘制背景图像,否则一切正常。代码(没有我想要绘制到地图上的东西)看起来像这样:

import numpy as np
from mpl_toolkits.basemap import Basemap
from matplotlib.backends.backend_pdf import PdfPages

latmin = -72.5
latmax = 40.
lonmin = 60.
lonmax = 370.

pp = PdfPages('datamap.pdf')

m = Basemap(projection='merc', llcrnrlat=latmin, urcrnrlat=latmax, llcrnrlon=lonmin, urcrnrlon=lonmax, resolution="c")

m.drawcoastlines(linewidth=0.25)
#m.shadedrelief()

pp.savefig()
pp.close()

当我取消注释m.shadedrelief()时,我得到以下内容:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
/xyz/datamap.py in <module>()
     32
---> 33 m.shadedrelief()
     34 

/usr/local/lib/python2.7/site-packages/mpl_toolkits/basemap/__init__.pyc in shadedrelief(self, ax, scale, **kwargs)
   3997             return self.warpimage(image='shadedrelief',ax=ax,scale=scale,**kwargs)
   3998         else:
-> 3999             return self.warpimage(image='shadedrelief',scale=scale,**kwargs)
   4000 
   4001     def etopo(self,ax=None,scale=None,**kwargs):

/usr/local/lib/python2.7/site-packages/mpl_toolkits/basemap/__init__.pyc in warpimage(self, image, scale, **kwargs)
   4115                 # any range of longitudes may be plotted on a world map.
   4116                 self._bm_lons = \
-> 4117                 np.concatenate((self._bm_lons,self._bm_lons+360),1)
   4118                 self._bm_rgba = \
   4119                 np.concatenate((self._bm_rgba,self._bm_rgba),1)
IndexError: axis 1 out of bounds [0, 1)

当我选择(出于测试目的)方式较小的地图,也没有经度大于180度的一切(包括shadedrelief)工作正常。这导致我假设具有经度格式的东西在这里不起作用。我尝试了一些东西,但我似乎无法找到一种方法如何解决这个问题,同时仍然绘制相同的地图部分

你知道如何在我的地图背景中画出一个阴影浮雕吗?

最佳,

洗练

1 个答案:

答案 0 :(得分:5)

底图/ init 代码中似乎存在错误。事实上,如果你看一下github上的最新版本[见https://github.com/matplotlib/basemap/blob/master/lib/mpl_toolkits/basemap/init.py#L4139以及它与你的错误的第4117行的不同之处],你会发现这个bug已经解决了。这意味着你可以这样做:

warning: ignoring broken refs/remotes/origin/master.fatal bad revision 'refs/remotes/origin/master..refs/heads/master' during executing git -c core.quotepath=false log refs/remotes/origin/master..refs/heads/master --pretty=format --encoding=UTF-8 -M --name-status -c --

init .py代码中或获取更新版本的底图。这两者中的任何一个都可以解决您的问题。