3

我正在尝试使用 Cartopy 创建一个图形,该图形需要在未投影的轴上绘制投影轴。

这是一个尽可能简单的代码版本,它将轴上的内容替换为背景颜色:

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

#Setup figure
fig = plt.figure()

#Unprojected axis
ax1 = fig.add_subplot(111, axisbg='b')

#Projected axis
ax2 = fig.add_subplot(111, axisbg='None', projection=ccrs.Mercator())

plt.show()

而不是让蓝色轴可见会产生这个: 从上面的代码中在此处输入图像描述 删除projection=ccrs.Mercator()参数会产生这个预期的结果: 在此处输入图像描述

如何使投影轴背景透明?

谢谢!

编辑:我尝试了这些其他设置背景透明的方法,但没有成功:

ax2 = fig.add_subplot(111, axisbg='None', alpha=0, projection=ccrs.Mercator())
ax2.patch.set_facecolor('none')
ax2.patch.set_alpha(0)
4

2 回答 2

6

您可以使用imshow()将图像投影到地图的背景上。Cartopystock_img()为此目的使用了该方法。

您还可以通过使用 NumPy 创建 2x2 像素图像并将其投影到整个地图范围内来获得纯色背景色:

import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.feature import LAND
    
ax = plt.axes(projection=ccrs.PlateCarree())

# Set RGB value to ocean colour
ax.imshow(np.tile(np.array([[[200, 200, 255]]], 
          dtype=np.uint8), [2, 2, 1]),
      origin='upper',
      transform=ccrs.PlateCarree(),
      extent=[-180, 180, -90, 90])

ax.add_feature(LAND)
ax.coastlines()

plt.show()

在此处输入图像描述

于 2016-07-25T23:31:57.113 回答
4

Cartopy在控制一些东西方面还不是很全面,恐怕你需要深入代码才能找到一些东西。

我认为您需要的基本调整是:

ax2.background_patch.set_fill(False)

我被黑的例子:

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

fig = plt.figure()
ax1 = fig.add_subplot(111, axisbg='b')
ax2 = fig.add_subplot(111, axisbg='None', projection=ccrs.Mercator())
ax2.background_patch.set_fill(False)
ax2.add_feature(cartopy.feature.LAND)
ax2.coastlines(color='red', linewidth=0.75)
plt.show()

图片 :在此处输入图像描述

编辑:删除复制/粘贴错误

HTH
帕特里克

于 2015-08-25T15:58:34.510 回答