Matplotlibs basemap模块可以为地图绘制背景,使用inbuilt functions for some basic maps和与{a2}关联的功能。在
这两个选项都很好,但是非常慢(see also here),特别是arcgis选项。在
对于一个单独的绘图来说,这不是一个大问题,但是对于多个绘图(在我的例子中是500个左右),这就变成了一个等待的练习,另外,我不想向arcgis发送数百个请求,因为arcgis总是以任何方式获取相同的地图。在
但如何设置/下载一次背景地图,并在绘制多个版本的循环中继续使用它?
我已将the great circle example from the documentation与etopo背景相结合,通过一些颜色循环进行测试:
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
# create new figure, axes instances.
fig=plt.figure()
ax=fig.add_axes([0.1,0.1,0.8,0.8])
# setup mercator map projection.
m = Basemap(llcrnrlon=-100.,llcrnrlat=20.,urcrnrlon=20.,urcrnrlat=60.,\
rsphere=(6378137.00,6356752.3142),\
resolution='l',projection='merc',\
lat_0=40.,lon_0=-20.,lat_ts=20.)
# nylat, nylon are lat/lon of New York
nylat = 40.78; nylon = -73.98
# lonlat, lonlon are lat/lon of London.
lonlat = 51.53; lonlon = 0.08
# draw great circle route between NY and London
m.drawcoastlines()
m.etopo()
# draw parallels
m.drawparallels(np.arange(10,90,20),labels=[1,1,0,1])
# draw meridians
m.drawmeridians(np.arange(-180,180,30),labels=[1,1,0,1])
colors = ('r','b','k','y')
for p_color in colors:
m.drawgreatcircle(nylon,nylat,lonlon,lonlat,linewidth=2,color=p_color)
filename = '%s.png' % p_color
plt.savefig(filename, dpi=100)
上面的方法很管用,但这仅仅是因为我没有结束这个情节。有了真实的数字,我很快就会失去记忆。如果我在循环的末尾添加一个plt.close()
,我就会丢失背景图。同样,当我把绘图设置放入循环中时:
只有当我把m.Basemap…
,m.etopo
的全部内容放入循环中时,它似乎才起作用(忽略第一个选项的内存问题),但这太慢了。在
如何设置“m”一次并继续使用它?在
我也许可以通过绘制一次背景地图,将我的数据绘制到透明的背景上,然后将其与imagemagick结合起来,我觉得应该有更好的解决方案。在
我想这个想法应该是保留底图图图而不是改变它。在循环中,添加要在不同图像之间进行更改的艺术家,保存该图形,然后删除该艺术家。在
相关问题 更多 >
编程相关推荐