如何提高 Cartopy 中的测地线分辨率/精度/平滑度

在我们的上一篇文章中,我们详细介绍了如何在 Cartopy 中绘制测地线。然而,正如你在结果地图中所见,测地线被分成几个清晰可见的段

默认分辨率下具有可见段的 Cartopy 测地线

为了修复此问题,我们需要子类化绘图的原始投影。在此示例中,我们子类化 ccrs.Mollweide()

cartopy_highres_mollweide.py
import cartopy.crs as ccrs

class HighResMollweide(ccrs.Mollweide):
    @property
    def threshold(self): return 100.0

注意 Mollweide 投影的默认阈值是 100000.0 - 你可以使用 print(ccrs.Mollweide().threshold) 自行检查

现在我们可以在 plt.axes() 中使用该投影:

cartopy_axes_highres.py
ax = plt.axes(projection=HighResMollweide())

具有提高分辨率的 Cartopy 测地线显示更平滑的曲线

完整示例代码

此代码重现上面显示的高分辨率测地线图像:

cartopy_highres_complete_example.py
import cartopy.crs as ccrs
import cartopy.feature as cf
from matplotlib import pyplot as plt

class HighResMollweide(ccrs.Mollweide):
    @property
    def threshold(self): return 100.0

ax = plt.axes(projection=HighResMollweide())
ax.stock_img()
ax.add_feature(cf.BORDERS)
# 在两点之间添加测地线
# 格式:plot([lon1, lon2], [lat1, lat2])
plt.plot([-75, 77.23], [43, 28.61],
         color='blue', linewidth=2,
         transform=ccrs.Geodetic()
         )
# 使图更大
plt.gcf().set_size_inches(20, 10)

# 将图保存为 SVG
plt.savefig("Cartopy-Geodetic-HiRes.svg")

感谢 StackOverflow 上的 @ajdawson 提供的有关如何解决此问题的原始提示


Check out similar posts by category: Cartopy, Geography, Python