使用Folium绘制choropleth地图如何实现悬停显示社区及均价信息
实现方法
你当前代码不生效的核心原因是:folium的choropleth()为封装的快捷着色接口,本身不支持传递tooltip参数,该参数仅对folium.GeoJson对象生效。要实现悬停显示社区名称和平均价格的效果,需要改用GeoJson接口自定义配置,同时保留分级着色能力,完整实现代码如下:
import folium import pandas as pd import json from branca.colormap import LinearColormap # 你的示例数据 d = {'neighbourhood_cleansed': ['Oostelijk Havengebied - Indische Buurt', 'Centrum-Oost', 'Centrum-West', 'Zuid', 'De Baarsjes - Oud-West', 'Bos en Lommer', 'De Pijp - Rivierenbuurt', 'Oud-Oost', 'Noord-West', 'Westerpark', 'Slotervaart', 'Oud-Noord', 'Watergraafsmeer', 'IJburg - Zeeburgereiland', 'Noord-Oost', 'Buitenveldert - Zuidas', 'Geuzenveld - Slotermeer', 'De Aker - Nieuw Sloten', 'Osdorp', 'Bijlmer-Centrum', 'Gaasperdam - Driemond', 'Bijlmer-Oost'], 'price': [20.0,30.0,40.0,50.0,60.0,70.0,80.0,20.0,30.0,40.0,50.0,60.0,70.0,80.0,20.0,30.0,40.0,50.0,60.0,70.0,80.0,20.0]} df = pd.DataFrame(data=d) # 构建社区名到均价的映射字典 price_map = df.set_index('neighbourhood_cleansed')['price'].to_dict() # 加载本地GeoJSON文件,把价格数据写入GeoJSON属性 with open(r'C:\neighbourhoods.geojson', 'r', encoding='utf-8') as f: geo_data = json.load(f) for feature in geo_data['features']: nb_name = feature['properties']['neighbourhood'] feature['properties']['avg_price'] = price_map.get(nb_name, 0) # 初始化颜色映射,和原choropleth配色一致 colormap = LinearColormap( colors=['#f2f0f7', '#dadaeb', '#bcbddc', '#9e9ac8', '#756bb1', '#54278f'], vmin=df['price'].min(), vmax=df['price'].max() ) # 初始化底图 map_ams_price = folium.Map( location=[52.3680, 4.9036], zoom_start=11, tiles="cartodbpositron" ) # 添加GeoJSON层,配置着色和悬停提示 folium.GeoJson( geo_data, style_function=lambda x: { 'fillColor': colormap(x['properties']['avg_price']), 'color': '#000000', 'weight': 0.2, 'fillOpacity': 0.7 }, tooltip=folium.features.GeoJsonTooltip( fields=['neighbourhood', 'avg_price'], aliases=['社区名称:', '平均价格:'], sticky=False, labels=True ) ).add_to(map_ams_price) # 添加价格图例 colormap.caption = 'Avg' colormap.add_to(map_ams_price) # 查看地图 map_ams_price
关键说明
- 提前将价格数据合并到GeoJSON的属性中,避免悬停提示读取字段时出现缺失
- 可通过修改
GeoJsonTooltip的aliases参数自定义提示框的字段显示名称,适配中文阅读需求 - 配色、透明度等参数和你原代码的choropleth配置完全一致,不会改变原有地图的视觉效果
内容的提问来源于stack exchange,提问作者Test
相关产品推荐
相关产品推荐

