Folium HeatMapWithTime绘制不同半径点时序热力图异常问题
问题背景
需求为使用Folium绘制时序动态热力图时,为每个热力点配置独立的半径值。
初始实现代码如下:
from folium import plugins map_hooray = folium.Map(location=[-23.5506507, -46.6333824], zoom_start = 10) # 字段类型转换 df_acc['LAT'] = df_acc['LAT'].astype(float) df_acc['LONG'] = df_acc['LONG'].astype(float) df_acc['RADIUS'] = df_acc['RADIUS'].astype(int) heat_df = df_acc[['LAT', 'LONG', 'RADIUS']] # 构造时间权重字段 heat_df['Weight'] = df_acc['TEMPO'].astype(float) heat_df = heat_df.dropna(axis=0, subset=['LAT','LONG', 'Weight']) # 构造时序点位数据、逐点半径数据 heat_data = [[[row['LAT'],row['LONG']] for index, row in heat_df[heat_df['Weight'] == i].iterrows()] for i in range(0,40)] heat_radius = [[[row['RADIUS']] for index, row in heat_df[heat_df['Weight'] == i].iterrows()] for i in range(0,40)] # 加载时序热力层 hm = plugins.HeatMapWithTime(heat_data,radius=heat_radius,auto_play=True,max_opacity=0.8) hm.add_to(map_hooray) map_hooray
运行代码后地图仅加载底图,无任何热力点渲染:
移除radius=heat_radius参数后,热力点可正常绘制,但所有点半径完全一致:
核心结论
folium.plugins.HeatMapWithTime 原生不支持逐点设置独立半径。
查看组件参数定义和前端渲染逻辑可知,radius参数仅支持两类合法输入:
- 单个数值:全局统一半径,对所有时间帧、所有点位生效
- 一维数组:长度和时间帧总数一致,为每个时间帧配置一个统一半径,同一帧内所有点位半径相同
传入和点位结构对齐的多层嵌套半径数组,会导致前端渲染逻辑类型校验失败,直接中断热力层渲染,因此只显示底图。
替代实现方案
方案1:半径折算为权重,复用原生热力组件
热力图点位的权重值会直接影响渲染时的扩散范围,可将需要设置的半径值做归一化处理后作为点位权重传入,配合全局基础半径参数,模拟逐点半径差异的视觉效果:
# 提前计算半径最大值做归一化 radius_max = heat_df['RADIUS'].max() # 构造带权重的点位数据,结构为[纬度, 经度, 归一化半径权重] heat_data = [ [ [row['LAT'], row['LONG'], row['RADIUS']/radius_max] for _, row in heat_df[heat_df['Weight'] == i].iterrows() ] for i in range(0,40) ] hm = plugins.HeatMapWithTime( heat_data, radius=12, # 配置全局基础半径 blur=8, # 调整模糊度匹配扩散效果 max_val=1.0, auto_play=True, max_opacity=0.8 ) hm.add_to(map_hooray)
该方案实现成本最低,无需修改依赖或额外开发,适合仅需视觉上区分点位大小、对半径精度要求不高的场景。
方案2:自定义时序图层,逐点配置CircleMarker
如果对半径精度要求高,需要严格按照指定值渲染点位大小,可放弃HeatMapWithTime,自行实现时序图层切换逻辑:
- 按时间帧分组数据,为每个时间帧创建独立的
FeatureGroup - 帧内每个点位根据自身RADIUS值生成
CircleMarker,精确配置半径参数 - 借助
plugins.TimestampedGeoJson或自定义时间轴控件,控制不同时间帧图层的显隐,实现动态播放效果
该方案灵活性最高,可同时自定义点位颜色、透明度、弹窗等所有属性,缺点是代码量相对更大。
内容的提问来源于stack exchange,提问作者Guilherme Freire
相关产品推荐
相关产品推荐

