python - cartopy:大圆距离线的更高分辨率

标签 python matplotlib cartopy

我正在尝试绘制两点之间的大圆距离。我在 cartopy 文档中找到了一个 (introductory_examples/01.great_circle.html):

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

ax = plt.axes(projection=ccrs.Robinson())

ax.set_global()

ax.coastlines()

plt.plot([-0.08, 132], [51.53, 43.17], color='red',      transform=ccrs.Geodetic())
plt.plot([-0.08, 132], [51.53, 43.17], color='blue', transform=ccrs.PlateCarree())

plt.show()

生成如下图片:

great circle example

问题是,在我自己的工作中,这两个点靠得更近,并且在不同的投影中(尽管我认为这在这里并不重要)。如果我将此代码更改为较小区域中的一条线,如下所示:

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

ax = plt.axes(projection=ccrs.Robinson())

ax.set_extent([-5, 55, 40, 55])

ax.coastlines()

plt.plot([-0.08, 50], [51.53, 43.17], color='red',      transform=ccrs.Geodetic())
plt.plot([-0.08, 50], [51.53, 43.17], color='blue', transform=ccrs.PlateCarree())

plt.show()

这会生成以下图像:shorter line

在这种情况下,红色大圆线看起来很糟糕,看起来是由于分辨率太低所致。如何增加构成大圆线的点数?

最佳答案

此问题是由于投影中的硬编码阈值造成的。目前这不是用户可控的参数,但您可以通过定义自己的子类来解决这个问题:

class LowerThresholdRobinson(ccrs.Robinson):

    @property
    def threshold(self):
        return 1e3

如果您在定义轴时使用 LowerThresholdRobinson() 而不是 ccrs.Robinson() 应该可以消除该问题。

关于python - cartopy:大圆距离线的更高分辨率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40270990/

相关文章:

python - 绘制正方形 Cartopy map

python - Cartopy 中正交投影的 Shapefile 绘图问题

Linux中的Python OCR模块?

python - 删除 pandas 数据框中所有元素的最佳方法是什么,其中一列中的值在另一列中存在不止一次?

python - 将子列表作为对象而不是列表复制到主列表中

python - 在 matplotlib 中传递用于绘图的元组会在第 10 行抛出 "Tuple Object is not callable"错误。 3个

python - 如何修复重叠的注释/文本

python - 从子图元素中获取已打印标签的列表,以避免图例中的重复输入

python - 将 Bash 变量读入 Python 脚本

python - 在墨卡托投影仪中在 map 上绘制数据看起来纬度翻转了 90 度