使用matplotlibbasemap对多个绘图使用一个背景图?

2024-09-28 05:22:44 发布

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

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(),我就会丢失背景图。同样,当我把绘图设置放入循环中时:

^{pr2}$

只有当我把m.Basemap…m.etopo的全部内容放入循环中时,它似乎才起作用(忽略第一个选项的内存问题),但这太慢了。在

如何设置“m”一次并继续使用它?在

我也许可以通过绘制一次背景地图,将我的数据绘制到透明的背景上,然后将其与imagemagick结合起来,我觉得应该有更好的解决方案。在


Tags: import绘图选项np地图绘制pltcolor
1条回答
网友
1楼 · 发布于 2024-09-28 05:22:44

我想这个想法应该是保留底图图图而不是改变它。在循环中,添加要在不同图像之间进行更改的艺术家,保存该图形,然后删除该艺术家。在

from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
# create new figure, axes instances.
# setup mercator map projection.
fig=plt.figure()
ax=fig.add_axes([0.1,0.1,0.8,0.8])
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:
    gc = m.drawgreatcircle(nylon,nylat,lonlon,lonlat,linewidth=2,color=p_color)
    filename = 'output{}.png'.format(p_color)
    plt.savefig(filename, dpi=100)
    # remove previous plot from axes
    for line in gc:
        line.remove()
    del gc

相关问题 更多 >

    热门问题