Folium Choropleth图显示空白,Geopandas同源GeoDataFrame绘图正常
问题根因定位
你遇到的全空白渲染问题,是Folium 0.7.0、Geopandas 0.5.0两个老版本的兼容逻辑叠加导致的,和你准备的GeoJSON格式、属性值正确性没有关系:
- 该版本Folium的Choropleth模块不支持直接传入pandas Series类型的data参数。模块内部的解析逻辑会把Series当成无结构的数值序列处理,不会自动将Series的行索引作为匹配键和GeoJSON的要素id做关联,最终会统计得到0条有效匹配对。
- 老版本Folium的Choropleth模块有个非常影响排查体验的设计缺陷:当数据匹配率为0时不会抛出任何错误提示,只会静默跳过所有矢量图形的渲染,最终输出一张只剩底图的空白页面,观感上和地图数据完全加载失败的状态没有区别。
你之前用Geopandas能正常完成填色绘图,是因为Geopandas直接在内存中关联矢量几何和对应属性表,不需要做跨结构的键值匹配,自然不会受到这个问题的影响。
可直接复用的修复方案
- 把传入的Series类型属性值,转成带明确列定义的DataFrame,强制指定匹配键列和数值列:
# 把Series重置为DataFrame,自动保留原有索引(也就是GeoJSON里的要素id)作为独立列 plot_data = radiosambab[['situacionpromedio']].reset_index() - 修改Choropleth调用逻辑,显式声明用于匹配的列、和填色用的数值列,避免Folium走默认解析逻辑出错:
m_2 = folium.Map(location=[-34.603722, -58.381592], tiles='openstreetmap', zoom_start=12) folium.Choropleth( geo_data=radiosambab.__geo_interface__, data=plot_data, # 固定传值规则:第一元素为和key_on匹配的键列名,第二元素为填色数值列名 columns=['COD_2010', 'situacionpromedio'], key_on='feature.id', fill_color='YlOrBr', fill_opacity=0.7, line_opacity=0.2 ).add_to(m_2) folium.LayerControl().add_to(m_2) m_2
额外排查提示
如果按上述步骤修改后还是没有渲染,需要检查GeoJSON要素id和data里的匹配键数据类型是否完全一致:老版本Folium会自动把GeoJSON里纯数字格式的id强制转成浮点型,如果你的匹配键是字符串格式(比如带前导0的行政区编码),就会出现字符串和数字匹配失败的问题,这时候只要把两边的id都统一转成字符串格式即可。
内容的提问来源于stack exchange,提问作者Ricardo Pasquini
相关产品推荐
相关产品推荐

