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

Folium与ColorMap报错:LinearColormap对象无法JSON序列化

解决LinearColormap无法JSON序列化及folium标记颜色映射问题

问题原因

你遇到的JSON序列化错误,是因为folium.Icon的color参数不接受LinearColormap对象——它需要的是具体的颜色字符串(比如十六进制码#00ff00、预定义颜色名green),而不是颜色映射实例。当folium尝试将地图数据转为JSON格式时,无法识别LinearColormap类型,因此抛出序列化失败的错误。同时,你当前的代码没有根据每行的"Zona de tarifa"数值去获取对应颜色,直接传整个映射对象也无法实现按字段值分配颜色的需求。

修正方案

需要在循环遍历数据时,针对每行的"Zona de tarifa"数值,调用LinearColormap的实例方法获取对应的颜色值,再将该颜色值传给folium.Icon。

修正后的完整代码

# 数据预处理与颜色映射创建
maps['Zona de tarifa'] = maps['Zona de tarifa'].astype('int')
linear = cm.LinearColormap(["green", "yellow", "red"], 
                           vmin=maps['Zona de tarifa'].min(), 
                           vmax=maps['Zona de tarifa'].max())

# 创建地图并添加标记
map = folium.Map(location=[maps.new_latitud.mean(), maps.new_longitud.mean()], 
                 zoom_start=14, 
                 control_scale=True)

for index, location_info in maps.iterrows():
    # 根据当前行的Zona de tarifa值获取对应颜色
    marker_color = linear(location_info["Zona de tarifa"])
    # 传入具体颜色值创建Icon
    folium.Marker(
        [location_info["new_latitud"], location_info["new_longitud"]],
        icon=folium.Icon(color=marker_color),
        popup=f"{location_info['Cliente']} {location_info['Conductor']}"
    ).add_to(map)

map

关键说明

  • linear(location_info["Zona de tarifa"]):调用颜色映射实例,传入具体的"Zona de tarifa"数值,返回对应的十六进制颜色字符串(比如#7fff00),这个格式是folium.Icon可以识别的。
  • 如果后续发现颜色显示有问题,可以检查LinearColormap返回的颜色格式——folium支持十六进制颜色、RGB元组(需转为字符串)或预定义颜色名,LinearColormap默认返回的十六进制格式是兼容的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 00:05:21