Matplotlib 如何在cartopy中在地图上绘制填充多边形
编辑,添加来自答案的建议 我有一个lat/lon中的顶点列表,用于定义地图上多边形的角。我想用cartopy在地图上画一个多边形,边是大圆。我已经试着按照上面的例子去做了,但是我不能让它工作。以下是我迄今为止所尝试的:Matplotlib 如何在cartopy中在地图上绘制填充多边形,matplotlib,cartopy,Matplotlib,Cartopy,编辑,添加来自答案的建议 我有一个lat/lon中的顶点列表,用于定义地图上多边形的角。我想用cartopy在地图上画一个多边形,边是大圆。我已经试着按照上面的例子去做了,但是我不能让它工作。以下是我迄今为止所尝试的: import numpy as np import matplotlib.pyplot as plt import cartopy.crs as ccrs import matplotlib.patches as mpatches map_proj = ccrs.Orthogr
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import matplotlib.patches as mpatches
map_proj = ccrs.Orthographic(central_latitude=0.0, central_longitude=80.0)
ax = plt.axes(projection=map_proj)
ax.set_global() # added following an answer to my question
ax.gridlines()
ax.coastlines(linewidth=0.5, color='k', resolution='50m')
lat_corners = np.array([-20., 0., 50., 30.])
lon_corners = np.array([ 20., 90., 90., 30.]) + 15.0 # offset from gridline for clarity
poly_corners = np.zeros((len(lat_corners), 2), np.float64)
poly_corners[:,0] = lon_corners
poly_corners[:,1] = lat_corners
poly = mpatches.Polygon(poly_corners, closed=True, ec='r', fill=False, lw=1, fc=None, transform=ccrs.Geodetic())
ax.add_patch(poly)
请注意,这些线不是大圆,并且似乎有四个以上的顶点。我觉得这是一件非常简单的事情,一定有办法做到,但我无法从cartopy文档中看出这一点。注意,示例使用了
ax.set_global()
我认为这可能是因为Cartopy的默认变换分辨率对于该投影来说太低了。您可以通过强制使用更高的分辨率来解决此问题:
map_proj = ccrs.Orthographic(central_latitude=0.0, central_longitude=80.0)
map_proj._threshold /= 100.
...
这提供了漂亮的曲线大圆弧。这是一个可运行的代码和输出。 荣誉归于:询问者、重要人物贝恩内斯特和阿吉道森
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import matplotlib.patches as mpatches
map_proj = ccrs.Orthographic(central_latitude=0.0, central_longitude=80.0)
map_proj._threshold /= 100. # the default values is bad, users need to set them manually
ax = plt.axes(projection=map_proj)
ax.set_global() # added following an answer to my question
ax.gridlines()
ax.coastlines(linewidth=0.5, color='k', resolution='50m')
lat_corners = np.array([-20., 0., 50., 30.])
lon_corners = np.array([ 20., 90., 90., 30.]) + 15.0 # offset from gridline for clarity
poly_corners = np.zeros((len(lat_corners), 2), np.float64)
poly_corners[:,0] = lon_corners
poly_corners[:,1] = lat_corners
poly = mpatches.Polygon(poly_corners, closed=True, ec='r', fill=True, lw=1, fc="yellow", transform=ccrs.Geodetic())
ax.add_patch(poly)
plt.show()
输出:
现在我看到了海岸线,但多边形仍然是错误的(请参见我编辑的问题)。是的,显然,多边形没有在cartopy中实现。为什么不改为使用矩形呢?我需要绘制非lat-lon网格上定义的循环模型的网格单元,例如立方体球体和二十面体网格。它们不是矩形,即使其中一些有四个顶点。在这种情况下,你能提高多边形的分辨率吗。我的意思是,在极端情况下,你可以提供一个每100公里左右有一个点的多边形;一旦这样做了,我会删除这个答案,这样的问题仍然是处女和明确的。