You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 18:15:03