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

使用Matplotlib自定义色卡绘制Folium分级统计图时遇UnboundLocalError

解决geopandas.explore自定义颜色分级图时的UnboundLocalError错误

问题场景

使用geopandas.explore绘制分级统计图(choropleth map)时,传入自定义的LinearSegmentedColormap对象会触发UnboundLocalError: local variable 'binning' referenced before assignment错误,但使用预定义颜色(如cmap='Blues')时可正常运行。相关代码如下:

import geopandas as gpd
import matplotlib.colors
import folium

color_list= matplotlib.colors.LinearSegmentedColormap.from_list('custom', [ "#e1f2f2", "#A8DCDC", "#115F5F"])

ventas_map= data.explore(column='ventas', scheme='Quantiles', cmap= color_list, tiles= 'OpenStreetMap', k=5, legend_kwds={'caption': 'ventas[$]','colorbar': True ,'scale': False}, name= 'ventas')

原因分析

geopandas.explore方法在处理字符串类型的预定义色板名称和自定义Colormap对象时逻辑不同:当传入自定义Colormap对象时,内部未正确初始化binning变量,导致报错。

解决方法

将自定义Colormap注册到matplotlib的全局色板字典中,之后用注册的名称(字符串形式)传入cmap参数,即可和预定义色板一样正常工作。修改后的代码如下:

import geopandas as gpd
import matplotlib.colors
import folium
import matplotlib.pyplot as plt

# 创建自定义色板并注册到matplotlib
custom_cmap = matplotlib.colors.LinearSegmentedColormap.from_list('custom', ["#e1f2f2", "#A8DCDC", "#115F5F"])
plt.register_cmap(cmap=custom_cmap)

# 使用注册后的色板名称调用explore
ventas_map = data.explore(
    column='ventas',
    scheme='Quantiles',
    cmap='custom',  # 此处使用注册的字符串名称
    tiles='OpenStreetMap',
    k=5,
    legend_kwds={'caption': 'ventas[$]', 'colorbar': True, 'scale': False},
    name='ventas'
)

另外,也可以尝试升级geopandas到最新版本,新版本可能修复了这个内部逻辑的bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:00:53