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

如何使用ipywidgets联动更新Folium热力图?

修正后可运行实现方案

核心逻辑:folium为静态渲染组件,无法直接通过属性绑定动态更新,我们用ipywidgets.Output作为地图容器,监听选择器的选中值变化后重新生成热力图渲染即可,不需要用到widgets.link(该方法仅支持绑定两个ipywidget组件的属性,无法绑定pandas DataFrame,这也是你报错的直接原因)。

完整代码如下:

import ipyvuetify as v
import ipywidgets as widgets
import folium
from folium.plugins import HeatMap as hm
import pandas as pd

# 你的GTD数据集保持原有导入即可,此处假设你已经完成gtd数据导入
# gtd = pd.read_csv('你的GTD数据文件路径.csv')

terrorists = [
    'Taliban', 
    'Shining Path (SL)', 
    'Islamic State of Iraq and the Levant (ISIL)', 
    'Farabundo Marti National Liberation Front (FMLN)', 
    'Al-Shabaab', 
    'Irish Republican Army (IRA)', 
    'Revolutionary Armed Forces of Colombia (FARC)', 
    'New Peoples Army (NPA)', 
    'Kurdistan Workers Party (PKK)', 
    'Boko Haram'
]

# 1. 创建选择器组件
widget_terrorist_selector = v.Select(label='选择恐怖组织', items=terrorists, v_model=terrorists[2])

# 2. 创建地图渲染容器
map_output = widgets.Output()

# 3. 定义更新回调函数
def update_map(change):
    # 获取当前选中的组织名称
    selected_group = change['new']
    # 筛选对应数据
    selected_data = gtd.loc[gtd['Group'] == selected_group]
    coords = selected_data[['Latitude','Longitude']].dropna() # 去除空坐标避免报错
    
    # 清空之前的地图输出
    map_output.clear_output()
    # 生成新的热力图
    with map_output:
        base_map = folium.Map(location = [25,15], tiles = "cartodbdark_matter", zoom_start = 2)
        hm(coords).add_to(base_map)
        display(base_map)

# 4. 监听选择器的v_model属性变化,触发更新
widget_terrorist_selector.observe(update_map, names='v_model')

# 5. 初始化渲染默认组织的热力图
update_map({'new': widget_terrorist_selector.v_model})

# 6. 组合显示选择器和地图
widgets.VBox([widget_terrorist_selector, map_output])

原有代码的错误点说明

  • widgets.link仅支持绑定两个继承了HasTraits类的ipywidget对象,你试图绑定pandas DataFrame的Group列,不属于widget对象,因此抛出类型错误
  • 变量定义顺序错误:你在调用observe方法之后才定义widget_terrorist_selector,运行时会找不到变量
  • v.Select的选中值存储在v_model属性中,不存在selected属性,observe方法的第二个参数是要监听的属性名,不是组件名

内容的提问来源于stack exchange,提问作者fchisowsky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:09:03