Python Basemap:使用shadedrelief、bluemarble或etopo(假经度格式)时出错

2024-06-28 11:45:51 发布

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

我想用python matplotlib basemap绘制一张以太平洋为中心的南半球地图。在

除非我尝试使用basemap例程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.shadeDelief()的注释时,会得到以下结果:

^{pr2}$

当我选择(出于测试目的)的方式时,那些经度也不超过180度的较小的贴图(包括shadedreif)都可以正常工作。这让我想到经度格式的东西在这里不起作用。我尝试了一些方法,但我似乎找不到一个方法来解决这个问题,同时仍然绘制相同的地图部分

你知道我怎么在地图的背景上画一个阴影吗?在

最好的

西联


Tags: fromimportpdfmatplotlib地图绘制pp背景
1条回答
网友
1楼 · 发布于 2024-06-28 11:45:51

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

# np.concatenate((self._bm_lons,self._bm_lons+360),1)
np.concatenate((self._bm_lons,self._bm_lons+360))

或者获取更新版本的basemap。这两种方法中的任何一种都能解决你的问题。在

相关问题 更多 >