多个形状内的基础图轮廓

2024-10-02 10:19:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在地图上绘制插值天气数据,只在shapefile中包含的城镇范围内。以下是使用导入的shapefile在底图上绘制的未剪裁等高线: Contourf overlaid on Basemap with Shapefile

我尝试通过遍历等高线集合来剪裁等高线集合,如下所示:

m.readshapefile('data/grense', 'grense',zorder=10,linewidth=1, 
drawbounds=True)

patches   = []
for info, shape in zip(m.grense_info, m.grense):
   patches.append( Polygon(np.array(shape), linestyle=':', fill=False) )

for poly in patches:
   for collection in cs.collections:
      collection.set_clip_path(poly)

这显然将等高线限制为一个多边形,即一个城镇,如下所示: Contourf clipped to one ploygon

是否可以创建一个轮廓集合,然后我可以使用ax.add\集合(新系列)?大致如下:

for poly in patches:
   for collection in cs.collections:
     contour_collection.append(collection)
ax.add_collection(contour_collection)

或者我可以从Patchcollection创建一条路径,然后使用collection.set\u clip\u补丁(补丁)?你知道吗


Tags: ininfofor绘制cscollectionshapefileshape
1条回答
网友
1楼 · 发布于 2024-10-02 10:19:19

根据swatchai的建议和Thomas Kühn之前的答案here,我设法解决了我的问题,见这里masked interpolation

通过执行以下操作:

#Combine shapefile shape object (m.grense) with map edges
##limits of the map:
x0,x1 = ax.get_xlim()
y0,y1 = ax.get_ylim()
map_edges = np.array([[x0,y0],[x1,y0],[x1,y1],[x0,y1]])

polys = [map_edges] + m.grense

codes = [
    [Path.MOVETO] + [Path.LINETO for p in p[1:]]
    for p in polys
]
polys_lin = [v for p in polys for v in p]
codes_lin = [c for cs in codes for c in cs]
path = Path(polys_lin, codes_lin)

#Important - Set Zorder greater than Contour and less than Map 
borders
patch = PathPatch(path,facecolor='white', lw=0, zorder =2)

##masking the data:
ax.add_patch(patch)

相关问题 更多 >

    热门问题