为什么 Cartopy 上的海洋填充器功能不适用于我的地图?

Why is the Ocean filler feature on Cartopy not working for my map?

我正在尝试用 Cartopy 绘制欧洲图,我想用与陆地不同的颜色填充海洋。我相信我应该能够起诉这行代码: ax.add_feature(ctp.feature.OCEAN, facecolor=(0.5,0.5,0.5)) 为了做到这一点,但是当我这样做时,会生成如下所示的地图。这显然不是我想要实现的。有谁能帮我看看我的代码有什么问题吗?

我已将代码放在下面以便在本地复制。

import cartopy as ctp
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
import matplotlib.pyplot as plt


plt.figure(figsize=(10, 10))
ax = plt.axes(projection=ccrs.EuroPP())
ax.add_feature(ctp.feature.BORDERS, linestyle='-', alpha=1)
ax.coastlines(resolution='10m')
ax.add_feature(ctp.feature.OCEAN,facecolor=(0.5,0.5,0.5))
ax.coastlines()
ax.gridlines()
plt.show()

投影ccrs.EuroPP()source是UTM的子类,是transversemercator的子类。子类化的复杂性可能是导致不良结果的原因。您可以尝试我的代码,它使用直接投影 TransverseMercator(central_longitude=10),它应该几乎等同于 EuroPP。可以调整 ax.set_extent() 中的值以获得您想要在地图上显示的区域。

plt.figure(figsize=(10, 10))

# Start- relevant code
pp_euro = ccrs.TransverseMercator(central_longitude=10)
ax = plt.axes(projection=pp_euro)
ax.set_extent([-1800000, 2050000, 4000000, 8000000], crs=pp_euro)
# End- relevant code

ax.add_feature(ctp.feature.BORDERS, linestyle='-', alpha=1)
ax.coastlines(resolution='10m')
ax.add_feature(ctp.feature.OCEAN,facecolor=(0.5,0.5,0.5))
ax.coastlines()
ax.gridlines(draw_labels=True)
plt.show()