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

为何重组数据后GeoPandas的绘图类型发生变化?

问题原因

你遇到的核心问题是:ireland_sales_summed不再是GeoDataFrame,而是普通的pandas DataFrame,导致调用plot()时触发的是pandas默认的折线图绘制逻辑,而非geopandas的地理绘图逻辑。

具体来说:

  • 通过groupby('County').sum()得到的ireland_vol_total是普通DataFrame(丢失了geometry地理列)。
  • 用这个普通DataFrame和GeoDataFrameireland_sales合并后,结果会自动降级为普通DataFrame,不再保留GeoDataFrame的地理属性。
  • pandas的plot()方法对带多列的DataFrame默认绘制折线图,这就是你看到异常图形的原因。
解决方案

推荐使用geopandas专门的**dissolve()**方法来聚合地理数据,它会自动保留地理信息,同时完成数值列的聚合,避免数据类型降级。

方式一:用dissolve替代groupby+merge(推荐)

替换代码中从ireland_vol_total = ...到ireland_sales_summed = ...的部分:

# 用dissolve聚合:按County分组,求和Volume,保留geometry和其他需要的列
ireland_sales_summed = ireland_sales.dissolve(
    by='County',
    aggfunc={
        'Volume': 'sum',
        'AREA': 'first'  # 保留AREA列的第一个值,根据需求调整
    }
).rename(columns={'Volume': 'County Volume Total'})

# 确保无销售数据的郡数值为0
ireland_sales_summed['County Volume Total'] = ireland_sales_summed['County Volume Total'].fillna(0)

dissolve()会直接返回GeoDataFrame,保留每个County对应的地理形状,调用plot()时自然会绘制 choropleth 地图。

方式二:手动恢复GeoDataFrame类型

如果坚持使用原有的groupby+merge流程,只需在合并后将数据重新转为GeoDataFrame:

# 原groupby和合并代码不变,最后添加这一步
ireland_sales_summed = gpd.GeoDataFrame(
    ireland_sales_summed,
    geometry='geometry',  # 指定地理列
    crs=ireland_sales.crs  # 继承原数据的坐标系
)
修改后完整的绘图代码
fig, ax = plt.subplots(1, 1)
fig.set_size_inches(10,10)

# 绘制聚合后的 choropleth 地图
ireland_sales_summed.plot(ax=ax, column='County Volume Total', cmap='Blues', legend=True)

ax.set_axis_off()
plt.show()
额外优化建议
  • 处理shapefile合并时,County列生成逻辑可以简化:ireland['County'] = ireland['COUNTY'].combine_first(ireland['CountyName']),替代循环更高效。
  • 后续制作气泡图时,可通过geometry.centroid获取郡的中心点,再绘制大小对应销量的散点。

内容的提问来源于stack exchange,提问作者Nick Seymour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:25:01