使用HeatMapWithTime时地图无法显示热签名问题求助
问题排查与修复方案
核心问题
你的代码存在两个关键问题导致热签名不显示:
- 数据格式不匹配:
HeatMapWithTime要求传入按时间分组的坐标集合,每个时间点对应一组[纬度, 经度, 权重]格式的数据;你当前直接传入所有坐标的扁平列表,插件无法识别时间与坐标的对应关系。 - 缺少热度权重:热图的渲染依赖权重值(如温度、观测频次等),未提供权重时,部分场景下插件不会生成热签名。
修复步骤
1. 按日期分组并构造正确的数据格式
假设你使用表格中的temperature字段作为热图权重,修改代码如下:
import folium from folium import plugins import pandas as pd ASOS_DATA = r"C:\Users\ASOS_Cali_Weather_Stations.csv" df = pd.read_csv(ASOS_DATA) # 统一日期格式为字符串,避免格式冲突 df['test_date'] = pd.to_datetime(df['test_date']).dt.strftime('%Y-%m-%d') # 按日期分组,生成每个时间点对应的坐标+权重列表 heat_data = [] # 获取去重并排序的日期列表 dates = sorted(df['test_date'].unique()) for date in dates: # 提取当前日期的所有数据 daily_data = df[df['test_date'] == date] # 构造 [纬度, 经度, 权重] 格式的列表 daily_coords = [[row['lat'], row['lon'], row['temperature']] for _, row in daily_data.iterrows()] heat_data.append(daily_coords) # 创建地图实例 map_heatmap_time = folium.Map([37, -122], tiles='CartoDB Dark_Matter', zoom_start=6) # 初始化时间热图插件,传入分组后的数据和日期索引 heatmap_time_plugin = plugins.HeatMapWithTime(heat_data, index=dates) heatmap_time_plugin.add_to(map_heatmap_time) map_heatmap_time
2. 验证数据完整性
- 检查
test_date列是否存在格式错误或空值,确保每个日期都有对应的坐标数据。 - 确认权重字段(如
temperature)无空值,可通过df['temperature'].fillna(0, inplace=True)填充缺失值。
3. 优化热图显示效果(可选)
如果热签名仍不明显,可调整插件参数增强可视化效果:
heatmap_time_plugin = plugins.HeatMapWithTime( heat_data, index=dates, radius=15, # 增大热图点的半径 blur=10, # 调整模糊程度 max_opacity=0.8 # 设置最大透明度 )
内容的提问来源于stack exchange,提问作者Geno
相关产品推荐
相关产品推荐

