使用cartopy制作透明图

时间:2015-05-06 12:19:48

标签: python matplotlib transparency cartopy

我想创建一个带有Cartopy的透明地图(然后可以将其用作Web应用程序的叠加层)。

尝试使用多种设置,投影,绘图类型等,但从未设法获得透明的Cartopy地图。

以下是一个简单的示例,说明透明度如何与Cartopy无关,以及如何在不使用Cartopy的情况下工作。

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np

#some data:
shape=(20, 30)
scale = 30
x = np.linspace(-scale, scale, shape[1])
y = np.linspace(-scale, scale, shape[0])

x2d, y2d = np.meshgrid(x, y)
u = 10 * np.cos(2 * x2d / scale + 3 * y2d / scale)
v = 20 * np.cos(6 * x2d / scale)

#cartopy
ef, ax = plt.subplots(1,1,figsize=(10,8), subplot_kw={'projection': ccrs.GOOGLE_MERCATOR})    
ef.subplots_adjust(hspace=0.0,wspace=0,bottom=0,top=1,left=0,right=1)

ax.quiver(x2d,y2d, u, v, transform=ccrs.GOOGLE_MERCATOR)

plt.savefig('cartopy_opaque.png',transparent=True)
plt.close()

#pure matplotlib:
ef, ax = plt.subplots(1,1,figsize=(10,8))    
ef.subplots_adjust(hspace=0.0,wspace=0,bottom=0,top=1,left=0,right=1)

ax.quiver(x2d,y2d, u, v)
plt.savefig('noncartopy_transparent.png',transparent=True)
plt.close()

我在这里遗漏了什么,或透明度不适用于Cartopy?

2 个答案:

答案 0 :(得分:3)

  

我在这里遗漏了什么,或透明度不适用于Cartopy?

是和否.Cartopy的透明度与matplotlib的透明度不同。造成这种情况的原因有很多,但主要原因是纸箱有非常高的非矩形轴(例如Interrupted Goode Homolosine):

IGH

出于这个原因,有两个补丁需要控制透明度:getFullYearax.background_patch

以下就足够了:

ax.outline_patch

在github问题跟踪器上有一个类似的问题: https://github.com/SciTools/cartopy/issues/465

我还汇总了一个生成地图图块的示例,它非常依赖于制作透明地图:https://gist.github.com/pelson/9738051

HTH

答案 1 :(得分:2)

我发现了类似的问题here。添加

ax.background_patch.set_alpha(0)

应该解决这个问题。