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

Chrome中Folium Choropleth添加GeoJson后无法显示的问题

解决Folium添加自定义GeoJson后地图无法显示的问题

看起来你遇到的问题很典型——当在Choropleth图层之上叠加自定义GeoJson图层(带悬停提示和高亮)时,地图渲染失效了。我帮你梳理几个最可能的原因和对应的修复方案:

1. 首先检查style_function和highlight_function是否定义

你的代码里调用了这两个函数,但没有给出具体实现。如果这两个函数未定义,Python会直接抛出错误,导致地图无法生成。你需要添加类似这样的定义:

def style_function(feature):
    # 匹配Choropleth的颜色逻辑,保持样式一致性
    price = feature['properties']['Price']
    # 对应你的threshold_scale区间设置颜色
    color_list = ['#ffffcc','#c7e9b4','#7fcdbb','#41b6c4','#1d91c0','#225ea8']
    for i, threshold in enumerate(myscale):
        if price <= threshold:
            return {
                'fillColor': color_list[i],
                'color': 'black',
                'weight': 1,
                'fillOpacity': 0.7
            }
    return {'fillColor': 'darkblue', 'color': 'black', 'weight': 1, 'fillOpacity': 0.7}

def highlight_function(feature):
    return {
        'fillColor': '#ffff00',
        'color': 'black',
        'weight': 3,
        'fillOpacity': 0.9
    }

注意:style_function的颜色要和你Choropleth里的fill_color='YlGnBu'逻辑匹配,避免样式混乱。

2. 避免Choropleth和GeoJson图层的冲突

你已经在choropleth()里设置了highlight=True,这会自动生成一个高亮图层,再叠加自定义GeoJson图层会导致渲染冲突。推荐用GeoJson替代Choropleth实现所有功能,既避免冲突又能完全自定义样式:

mymap = folium.Map(location=[y_map, x_map], zoom_start=11, tiles=None)
folium.TileLayer('CartoDB positron', name="Light Map", control=False).add_to(mymap)

myscale = (merged['Price'].quantile((0,0.1,0.75,0.9,0.98,1))).tolist()

# 引入颜色映射工具,和Choropleth效果对齐
import branca.colormap as cm
colormap = cm.LinearColormap(colors=['#ffffcc','#c7e9b4','#7fcdbb','#41b6c4','#1d91c0','#225ea8'], 
                             index=myscale, 
                             vmin=merged['Price'].min(), 
                             vmax=merged['Price'].max())

def style_function(feature):
    price = feature['properties']['Price']
    return {
        'fillColor': colormap(price),
        'color': 'black',
        'weight': 1,
        'fillOpacity': 0.7
    }

def highlight_function(feature):
    return {
        'fillColor': '#ffff00',
        'color': 'black',
        'weight': 3,
        'fillOpacity': 0.9
    }

# 整合颜色填充、悬停提示和高亮到单个GeoJson图层
NIL = folium.features.GeoJson(
 merged,
 style_function=style_function,
 highlight_function=highlight_function,
 tooltip=folium.features.GeoJsonTooltip(
     fields=['Postcode','Price'],
     aliases=['Postcode: ','Price: '],
     style=("background-color: white; color: #333333; font-family: arial; font-size: 12px; padding: 10px;")
 )
)
mymap.add_child(NIL)
mymap.add_child(colormap)  # 添加颜色图例
folium.LayerControl().add_to(mymap)

mymap

这种方式把所有功能整合到一个GeoJson图层,避免了重复图层的渲染冲突。

3. 检查merged GeoDataFrame的有效性

确保你的merged数据是有效的GeoDataFrame:

  • 运行merged.is_valid.all()检查所有几何图形是否有效,若存在无效项,用merged = merged[merged.is_valid]过滤。
  • 确保Postcode字段是字符串类型(Choropleth的key_on指向feature.properties.Postcode,若Postcode是数字可能匹配失败),可通过merged['Postcode'] = merged['Postcode'].astype(str)转换。

4. 验证Folium版本兼容性

较老版本的Folium可能存在参数兼容问题,建议升级到最新稳定版:

pip install --upgrade folium branca

Branca是Folium依赖的颜色映射库,升级它也能避免颜色渲染异常。

按照上面的步骤排查,应该能解决你的地图无法显示的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:12:37