GeoPandas绘制多组MultiPolygon:8幅图每幅含3图例的实现问题
实现同一子图展示三个来源多边形的方案
核心思路
将每组的三个来源多边形分别打上标识标签,统一存入GeoDataFrame,针对每组数据单独绘图,通过样式区分不同来源,自动生成图例。
步骤与代码示例
- 导入依赖库
import matplotlib.pyplot as plt import geopandas as gpd from shapely.geometry import MultiPolygon
- 循环绘制8幅对比图
# 设置画布,采用2行4列布局,可根据需求调整尺寸 fig, axes = plt.subplots(nrows=2, ncols=4, figsize=(20, 10)) axes = axes.flatten() # 将二维轴数组转为一维,方便循环遍历 for i in range(8): # 获取当前组的三个来源多边形集合 extracted = extracted_poly[i] original = original_poly_flip_y[i] wkt = wkt_poly_flip_y[i] # 统一将多边形列表转换为MultiPolygon格式 def to_multipoly(poly_list): if isinstance(poly_list, MultiPolygon): return poly_list return MultiPolygon(poly_list) # 构建带来源标识的数据结构,用于生成GeoDataFrame data_entries = [ {"geometry": to_multipoly(extracted), "source": "Extracted"}, {"geometry": to_multipoly(original), "source": "Original"}, {"geometry": to_multipoly(wkt), "source": "WKT"} ] # 创建GeoDataFrame,替换为你的数据对应的CRS gdf = gpd.GeoDataFrame(data_entries, crs="EPSG:4326") # 在当前子图绘制多边形,设置样式区分不同来源 gdf.plot( ax=axes[i], column="source", categorical=True, legend=True, legend_kwds={"title": "Data Source"}, alpha=0.6, # 设透明度避免遮挡 edgecolor="black" # 加边框增强多边形辨识度 ) # 设置子图标题与坐标轴状态 axes[i].set_title(f"Group {i+1}") axes[i].axis("off") plt.tight_layout() plt.show()
常见问题排查
- 若仍触发TypeError,检查每组多边形列表中的元素是否为有效的shapely Polygon对象,排除空值或无效几何数据。
- 若图例显示异常,确认
source字段为字符串类型,且每个GeoDataFrame的三个数据条目均正确赋值。
内容的提问来源于stack exchange,提问作者DanielBell99
相关产品推荐
相关产品推荐

