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

如何隐藏Python Folium Choropleth图例并同步图层控制?

解决Folium Choropleth图例与图层控制同步的问题

Folium自带的图层控制默认不会联动Choropleth的图例显示,要实现选中对应图层才显示其图例,可通过自定义JavaScript代码实现:

  • 第一步:给图层和图例添加可识别标识
    创建Choropleth时,通过name参数给每个图层设置唯一名称,后续JS会通过这个名称匹配对应图例:

    import folium
    
    m = folium.Map(location=[5.55, -0.2], zoom_start=7)
    
    # 创建绿色图层
    green_layer = folium.Choropleth(
        geo_data=你的地理数据,
        data=你的绿色图层数据,
        columns=['id', 'value'],
        key_on='feature.id',
        fill_color='Greens',
        name='绿色图层'
    ).add_to(m)
    
    # 创建蓝色图层
    blue_layer = folium.Choropleth(
        geo_data=你的地理数据,
        data=你的蓝色图层数据,
        columns=['id', 'value'],
        key_on='feature.id',
        fill_color='Blues',
        name='蓝色图层'
    ).add_to(m)
    
  • 第二步:添加自定义JS控制图例显隐
    通过folium.Element插入JS代码,监听图层控制的勾选事件,根据选中状态切换对应图例的显示/隐藏:

    js_code = """
    document.addEventListener('DOMContentLoaded', function() {
        // 获取图层控制的所有复选框
        const layerChecks = document.querySelectorAll('.leaflet-control-layers-selector');
        // 获取所有Choropleth图例(默认类名为chroma-legend)
        const allLegends = document.querySelectorAll('.chroma-legend');
        // 按图层添加顺序对应图例(绿色图层对应第一个图例,蓝色对应第二个)
        const greenLegend = allLegends[0];
        const blueLegend = allLegends[1];
    
        // 初始化时只显示选中图层的图例
        updateLegends();
    
        // 给每个复选框绑定切换事件
        layerChecks.forEach(check => {
            check.addEventListener('change', updateLegends);
        });
    
        function updateLegends() {
            // 获取当前选中的图层名称
            const selectedLayers = Array.from(layerChecks)
                .filter(cb => cb.checked)
                .map(cb => cb.nextElementSibling.textContent.trim());
    
            // 先隐藏所有图例
            allLegends.forEach(leg => leg.style.display = 'none');
    
            // 显示选中图层对应的图例
            if (selectedLayers.includes('绿色图层')) greenLegend.style.display = 'block';
            if (selectedLayers.includes('蓝色图层')) blueLegend.style.display = 'block';
        }
    });
    """
    
    # 将JS代码添加到地图中
    m.get_root().html.add_child(folium.Element(js_code))
    
    # 添加图层控制组件
    folium.LayerControl().add_to(m)
    
    # 保存地图
    m.save('sync_legend_map.html')
    
  • 注意要点:

    • 若图例的DOM类名有变动,需通过浏览器开发者工具查看实际类名,调整JS中的选择器
    • 图层name参数要和JS中判断的名称完全一致,否则无法匹配
    • 代码支持多图层同时选中,会自动显示所有选中图层的图例

内容的提问来源于stack exchange,提问作者G. Macia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:55:21