如何为Folium地图添加悬浮提示?解决GeoJsonTooltip报错问题
解决Folium中GeoJsonTooltip的TypeError问题
核心报错原因
这个'NoneType' object is not subscriptable错误,本质是你在Tooltip中引用的LocationID、Trips_Forcast字段没有正确出现在GeoJSON的properties属性里,或者字段路径书写错误,导致代码找不到对应值。
第一步:检查并修正GeoJSON数据结构
- 打开你合并后的GeoJSON文件,查看每个
feature的properties节点,确认是否包含LocationID和Trips_Forcast字段。 - 如果缺失,重新用GeoPandas完成数据合并,确保字段被正确写入属性:
import geopandas as gpd import pandas as pd # 读取原始数据 geo_df = gpd.read_file("曼哈顿聚类.geojson") trip_df = pd.read_csv("出行预测数据.csv") # 按LocationID关联,确保字段名完全匹配 merged_data = geo_df.merge(trip_df, on="LocationID", how="left") # 处理缺失值,避免Tooltip显示异常 merged_data["Trips_Forcast"] = merged_data["Trips_Forcast"].fillna(0) # 导出带完整属性的GeoJSON merged_data.to_file("合并后的聚类数据.geojson", driver="GeoJSON")
第二步:正确配置Tooltip图层
Choropleth图层无法直接绑定Tooltip,需要单独添加一个透明的GeoJSON图层来承载悬浮提示,示例代码:
import folium # 初始化地图(曼哈顿坐标) map_obj = folium.Map(location=[40.7128, -74.0060], zoom_start=12) # 添加颜色映射的Choropleth图层 folium.Choropleth( geo_data="合并后的聚类数据.geojson", data=merged_data, columns=["LocationID", "Trips_Forcast"], key_on="feature.properties.LocationID", # 必须和GeoJSON中的字段路径完全一致 fill_color="YlGnBu", fill_opacity=0.7, line_opacity=0.1, legend_name="预测出行量" ).add_to(map_obj) # 添加带悬浮提示的GeoJSON图层(透明,仅用于交互) folium.GeoJson( "合并后的聚类数据.geojson", tooltip=folium.GeoJsonTooltip( fields=["LocationID", "Trips_Forcast"], aliases=["区域ID:", "预测出行数:"], style=("background-color: #fff; color: #333; font-size: 12px; padding: 8px; border-radius: 4px;") ), style_function=lambda x: {"fillOpacity": 0, "color": "transparent"} # 设置图层透明 ).add_to(map_obj) # 保存地图 map_obj.save("曼哈顿出行预测地图.html")
关键注意点
key_on参数必须严格匹配GeoJSON中的字段路径,比如feature.properties.LocationID不能写成feature.LocationID- 确保合并后的DataFrame没有缺失值,否则Tooltip可能显示异常
- 不要尝试直接给Choropleth返回的对象绑定Tooltip,必须单独创建GeoJSON图层实现悬浮提示
内容的提问来源于stack exchange,提问作者Emislim
相关产品推荐
相关产品推荐

