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
相关产品推荐
相关产品推荐

