You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GeoPandas绘制多组MultiPolygon:8幅图每幅含3图例的实现问题

实现同一子图展示三个来源多边形的方案

核心思路

将每组的三个来源多边形分别打上标识标签,统一存入GeoDataFrame,针对每组数据单独绘图,通过样式区分不同来源,自动生成图例。

步骤与代码示例

  1. 导入依赖库
import matplotlib.pyplot as plt
import geopandas as gpd
from shapely.geometry import MultiPolygon
  1. 循环绘制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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:11:16