Folium制作Choropleth地图如何添加悬停/点击显示州名与难民数的标注
Folium Choropleth地图实现州级数据交互的解决方案
该需求完全可实现,Folium原生支持Choropleth图层的悬停高亮、自定义弹窗提示功能,无需额外引入第三方依赖,仅需在原有可运行代码基础上补充少量配置即可落地。
前置修正
先对齐原有代码的变量逻辑:现有代码中通过pd.read_excel读入的数据集变量为twentysa,但Choropleth配置中传入的是未定义的thirteensa,运行前需确认使用的对应年份数据集变量名,避免触发未定义报错。
核心交互配置
- 开启悬停高亮:给Choropleth组件添加
highlight=True参数,鼠标移动到对应州区域时,该区域会自动和其他区域形成视觉区分,降低交互识别成本。 - 自定义提示内容:通过Choropleth内置的
tooltip参数,绑定GeoJSON自带的州名字段、业务数据里的难民流入量字段,即可实现悬停时自动弹出带目标信息的提示框。
字段匹配逻辑和现有配置完全兼容:当前设置的key_on="feature.id"对应GeoJSON里存储的州两字母缩写,和Excel数据里的State列字段匹配,Folium会自动完成数据关联,无需手动做字段连接。
调整后可运行的完整代码
import pandas as pd import folium # 替换为你实际使用的对应年份难民数据集 refugee_dataset = pd.read_excel("State_abrv (9).xlsx") geo_source = ( "https://raw.githubusercontent.com/python-visualization/folium/master/examples/data" ) state_geo = f"{geo_source}/us-states.json" h = folium.Map(location=[48, -102], zoom_start=3) folium.Choropleth( geo_data=state_geo, name="2013 难民流入数据", data=refugee_dataset, columns=["State", "Refugee Influx"], key_on="feature.id", fill_color="BuPu", fill_opacity=0.8, line_opacity=0.3, legend_name="2013年各州难民流入量", # 新增交互逻辑 highlight=True, tooltip=folium.features.GeoJsonTooltip( fields=["name", "Refugee Influx"], aliases=["州名称:", "难民流入量:"], localize=True, sticky=False ) ).add_to(h) # 可选:添加图层切换控制器 folium.LayerControl().add_to(h) h
实际效果与注意事项
- 鼠标悬停到任意州的多边形区域时,会自动弹出格式化的提示框,同步展示该州的完整名称、匹配到的难民流入量数值,当前悬停的州会触发高亮效果。
- 若需调整提示触发方式为点击弹出,可将tooltip配置中的
sticky参数设为True,即可实现点击区域后固定展示提示内容的效果。 - 若出现部分州数据匹配失败的问题,可检查Excel中State列的两字母缩写格式,确保和GeoJSON中存储的州ID格式完全一致(无多余空格、大小写匹配)。
- 兼容性说明:如果上述tooltip配置不生效,可先通过
pip install --upgrade folium升级到Folium最新稳定版,旧版本组件对交互参数的支持不全。
内容的提问来源于stack exchange,提问作者Claire Benson
相关产品推荐
相关产品推荐

