基于大洲与国家列值的Folium交互式过滤可视化实现求助
实现GeoDataFrame的交互式过滤与Folium可视化
需求说明
基于Natural Earth矢量数据的GeoDataFrame(含continent和name列),构建两级交互下拉框:
- 第一级选择大洲,第二级动态加载对应大洲的国家列表
- 选择国家后,在Folium地图上展示该国家的位置
- 最终可将交互式Notebook保存为HTML文件
修正后的完整代码
import geopandas as gpd import ipywidgets as widgets from IPython.display import display import folium # 加载Natural Earth数据 df = gpd.read_file(gpd.datasets.get_path("naturalearth_lowres")) # 保留需要的列:大洲、国家名、几何信息 df = df[['continent', 'name', 'geometry']] # 初始化输出组件,用于展示地图 out = widgets.Output(layout={'border': '1px solid #ccc'}) # 第一级下拉框:选择大洲 continent_dropdown = widgets.Dropdown( options=df['continent'].unique().tolist(), value=df['continent'].unique()[0], description='选择大洲:', disabled=False, ) # 第二级下拉框:选择国家(初始为空,后续动态更新) country_dropdown = widgets.Dropdown( options=[], description='选择国家:', disabled=True, ) # 根据选中的大洲更新国家下拉框选项 def update_countries(change): selected_continent = change['new'] # 过滤出当前大洲的国家 filtered_countries = df[df['continent'] == selected_continent]['name'].unique().tolist() country_dropdown.options = filtered_countries country_dropdown.value = filtered_countries[0] if filtered_countries else None country_dropdown.disabled = False # 初始加载第一个国家的地图 show_country_map(country_dropdown.value) # 根据选中的国家展示地图 def show_country_map(selected_country): out.clear_output() # 过滤出选中国家的数据 country_data = df[df['name'] == selected_country] with out: # 创建Folium地图,以选中国家的中心为初始视角 m = folium.Map(location=[country_data.geometry.centroid.y.iloc[0], country_data.geometry.centroid.x.iloc[0]], zoom_start=4) # 添加国家边界图层,显示名称提示 folium.GeoJson(country_data, tooltip=folium.GeoJsonTooltip(fields=['name'])).add_to(m) display(m) # 绑定下拉框的事件监听 continent_dropdown.observe(update_countries, names='value') country_dropdown.observe(lambda change: show_country_map(change['new']), names='value') # 初始化加载默认选项的地图 update_countries({'new': continent_dropdown.value}) # 展示所有交互组件 display(continent_dropdown, country_dropdown, out)
关键优化说明
- 两级联动逻辑:新增大洲选择后动态更新国家列表的功能,解决原代码仅单级下拉框的问题
- 精准可视化:替换批量展示大洲国家的逻辑,改为聚焦单个选中国家,添加 tooltip 增强交互体验
- 初始化完善:启动时自动加载默认选项的地图,避免空输出状态
- 代码可读性:重命名组件变量、添加注释,提升代码维护性
保存为HTML文件的方法
在Notebook中执行以下操作:
- 确认所有交互组件正常运行
- 点击界面顶部「File」→「Download as」→「HTML (.html)」
- 下载后的HTML文件保留全部交互功能,可直接在浏览器打开使用
内容的提问来源于stack exchange,提问作者gis.rajan
相关产品推荐
相关产品推荐

