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

求助:Matplotlib/Geopandas绘图突然异常缓慢,代码未改动

Geopandas与Matplotlib绘图突然异常缓慢的问题排查

问题详情

  • 运行环境:JupyterLab,远程服务器、本地机器均出现相同症状,CPU负载等系统指标无异常
  • 异常现象:代码未做任何修改,原本50秒完成的地图着色绘图操作,现在耗时长达50分钟;首次出现于点击「重启内核并全部运行」之后
  • 依赖版本:
    • Matplotlib 3.5.1
    • Geopandas 0.12.0
    • Pandas 1.4.2
    • Python 3.9.12
  • 慢执行代码段:
fig, ax = plt.subplots(figsize=(7.5,7.5), dpi = 100)

shape.plot(ax=ax, facecolor='Grey', color= 'white')
shape.plot(ax=ax, column='datacol', cmap='Blues');

ax = plt.gca()
ax.set_facecolor('xkcd:white')

fig.savefig(path, facecolor='white', dpi = fig.dpi)

排查与解决方向

  1. 检查GeoDataFrame几何有效性
    重启内核后重新加载的shp文件可能存在无效几何(如自相交)或重复数据,这类问题会大幅拖慢渲染速度。执行以下代码检查:

    print(shape.geometry.is_valid.value_counts())
    

    若存在无效几何,用shape = shape.make_valid()修复后再尝试绘图。

  2. 合并重复绘图调用
    当前代码两次调用shape.plot(),会重复处理整个GeoDataFrame的几何数据。合并成一次调用可直接减少计算开销:

    fig, ax = plt.subplots(figsize=(7.5,7.5), dpi=100)
    # 一次完成底图、数据着色与边界设置
    shape.plot(ax=ax, column='datacol', cmap='Blues', edgecolor='white', facecolor='Grey')
    ax.set_facecolor('xkcd:white')
    fig.savefig(path, facecolor='white', dpi=fig.dpi)
    
  3. 切换Matplotlib后端
    JupyterLab的交互式后端(如ipympl)在渲染复杂几何时可能变慢,可强制使用非交互式后端:
    在代码开头添加:

    import matplotlib
    matplotlib.use('Agg')
    

    绘图完成后用plt.show()显示静态图即可。

  4. 简化几何数据
    若shp文件的几何顶点过多,会增加渲染压力。对数据做适当简化:

    # tolerance值根据数据精度调整,单位与数据坐标系一致
    shape['geometry'] = shape.geometry.simplify(tolerance=0.01)
    
  5. 清理Matplotlib残留对象
    重启内核后可能存在未释放的绘图对象,干扰当前渲染。在绘图代码前添加:

    plt.close('all')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:20:29