使用Python basemap etopo()生成IndexE

2024-09-28 05:24:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在试着绘制地图。我已经成功地安装了matplotlib、basemap和Pillow,并且可以绘制基本的绘图。下面的代码适用于我。在

from mpl_toolkits.basemap import Basemap
from PIL import Image
import matplotlib.pyplot as plt

m = Basemap(projection = 'mill',
        llcrnrlat = -90,
        llcrnrlon = -180,
        urcrnrlat = 90,
        urcrnrlon = 180,
        resolution = 'c')

m.drawcoastlines()
#m.etopo()

plt.show()

但是,取消注释“etopo()”命令会产生以下错误。在

^{pr2}$

我已经尝试过重新安装和更新所有相关的软件包,但是没有成功。对于这种情况,我也找不到任何关于这个错误的信息。我使用的是Windows8.1和32位的Python3.5.1


Tags: 代码fromimport绘图matplotlib错误绘制plt
2条回答

这似乎是basemap和最近的numpy版本之间的不兼容。建议的解决方案将恢复为默认投影,因为第一个关键字不是projection而是llcrnrlat。在

我还不知道到底是什么原因导致了索引错误,不过恢复到老版本的numpy是可行的。看来Numpy1.9.2是最新的工作版本。可能是因为concatenate命令更改了某些内容。在

编辑: 我更改了basemap/init.py中的第4167行,以获得与旧版本numpy相同的结果。它似乎起了作用:

Old: np.concatenate((self._bm_lons,self._bm_lons+360),1)
New: np.concatenate((self._bm_lons.T,self._bm_lons.T+360)).T

现在不推荐使用沿1D数组和非零轴连接,这就是引发异常的原因。在

如果您只是测试Basemap.etopo()功能,我更新了您的脚本:

from mpl_toolkits.basemap import Basemap
from PIL import Image
import matplotlib.pyplot as plt

# make a miller cylindrical projection with defaults
m = Basemap('mill')

m.drawcoastlines()
# now displays topo relief image
m.etopo()

plt.show()

相关问题 更多 >

    热门问题