使用Python的Folium库制作巴西州级Choropleth地图遇到问题
搞定Folium巴西州级Choropleth地图的常见坑
嘿,看你给出的代码片段,最后一行folium.LayerContro...明显没写完,这是第一个要补全的小问题,得改成folium.LayerControl().add_to(m),不然图层控件没法正常显示哦。
接下来针对Choropleth地图不渲染、数据匹配不上这些常见问题,给你几个排查方向:
1. 核对key_on参数和GeoJSON的结构
你代码里用了key_on='feature.id',但很多巴西州的GeoJSON文件里,州的标识其实藏在feature.properties里,比如feature.properties.sigla(州缩写)或者feature.properties.name(州全称)。你得打开br-states.json看看每个feature的字段,确保这个参数和你new_data里State列的格式完全对应。
举个例子,如果你的GeoJSON里州缩写存在feature.properties.sigla,而new_data的State列是SP、RJ这类缩写,那key_on就得改成'feature.properties.sigla'才行。
2. 确保数据匹配无误
- 检查
new_data里的State值和GeoJSON对应字段完全一致,大小写、空格都不能错,比如“Rio de Janeiro”和“Rio De Janeiro”会直接匹配失败; - 确认
QTY列是数值类型,Choropleth靠数值渲染颜色,如果是字符串得先转成数值:new_data['QTY'] = pd.to_numeric(new_data['QTY'], errors='coerce')(假设你用pandas处理数据)。
3. 修正后的完整代码示例
给你一个可以直接参考的完整代码模板,你根据自己的实际情况调整就行:
import folium import json import pandas as pd # 假设用pandas处理数据 # 加载本地GeoJSON文件 with open('br-states.json') as json_data: br_states_geo = json.load(json_data) # 确保数据是DataFrame格式(如果不是的话转一下) new_data = pd.DataFrame(new_data) # 初始化地图 m = folium.Map( location=[-18.826592, -55.212558], zoom_start=4, tiles='OpenStreetMap' ) # 添加Choropleth图层,记得调用add_to(m)把图层加到地图上 folium.Choropleth( geo_data=br_states_geo, name='choropleth', data=new_data, columns=['State', 'QTY'], key_on='feature.properties.sigla', # 这里根据你的GeoJSON结构调整 fill_color='YlGn', fill_opacity=0.7, line_opacity=0.2, legend_name='Unemployment Rate (%)' ).add_to(m) # 添加图层控件,让用户可以切换图层 folium.LayerControl().add_to(m) # 保存地图为HTML文件,或者在Notebook里直接display(m) m.save('brazil_unemployment_map.html')
4. 其他排查小技巧
- 确认
br-states.json的文件路径正确,要是路径错了地图根本加载不出GeoJSON; - 如果地图加载后没颜色,打开浏览器开发者工具(按F12)看看控制台报错,比如有没有GeoJSON加载失败、数据匹配错误的提示,能帮你快速定位问题。
内容的提问来源于stack exchange,提问作者Rafael Rodrigues Santos
相关产品推荐
相关产品推荐

