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

问题描述

我想用 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,0.5))
ax.coastlines()
ax.gridlines()
plt.show()

output

解决方法

投影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()

europp

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...