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

Folium标记点基于数值区间的颜色映射实现

嘿,我来帮你搞定Folium标记点按DataFrame数值区间配色的问题!其实思路很清晰,就是先把数值映射到对应颜色,再把颜色绑定到标记点上,下面分两种常用场景给你详细说:

场景1:离散数值区间(固定颜色对应固定区间)

如果你想把数值分成几个明确的区间(比如0-10用绿色,11-20用黄色这类),可以用pandas.cut()来完成数值到颜色的映射:

  1. 定义区间和对应颜色
    先确定你要划分的数值范围,以及每个区间对应的颜色(Folium的Marker Icon支持预设的颜色名称,比如'green'、'yellow'、'orange'、'red'这些):

    import pandas as pd
    import folium
    
    # 假设你的数据存在df里,包含经纬度列(lat、lon)和目标数值列(比如叫value)
    bins = [0, 10, 20, 30, float('inf')]  # 自定义数值区间
    color_labels = ['green', 'yellow', 'orange', 'red']  # 对应每个区间的颜色
    
    # 给df新增一列color,根据value列的数值区间分配颜色
    df['marker_color'] = pd.cut(df['value'], bins=bins, labels=color_labels)
    
  2. 遍历数据添加带颜色的标记点
    接下来创建地图,遍历每一行数据,把分配好的颜色传给Marker的icon参数:

    # 初始化地图,中心设为数据的平均经纬度
    m = folium.Map(location=[df['lat'].mean(), df['lon'].mean()], zoom_start=10)
    
    # 逐行添加标记点
    for _, row in df.iterrows():
        folium.Marker(
            location=[row['lat'], row['lon']],
            popup=f"数值: {row['value']}",  # 弹窗显示对应数值
            icon=folium.Icon(color=row['marker_color'])  # 绑定映射好的颜色
        ).add_to(m)
    
    # 保存地图
    m.save('colored_markers_map.html')
    
场景2:连续渐变颜色(随数值平滑变化)

如果想要颜色随数值连续渐变(比如数值越小越绿,越大越红),可以用branca.colormap生成线性颜色映射:

  1. 创建连续颜色映射
    先导入LinearColormap,基于数值的最小最大值生成渐变配色:

    from branca.colormap import LinearColormap
    
    # 定义渐变颜色范围,比如从绿到黄再到红
    colormap = LinearColormap(
        colors=['#00FF00', '#FFFF00', '#FF0000'],
        vmin=df['value'].min(),  # 数值最小值
        vmax=df['value'].max()   # 数值最大值
    )
    
  2. 用CircleMarker实现渐变标记
    这里注意:Folium的普通Marker Icon不支持自定义十六进制颜色,所以推荐用CircleMarker(圆形标记)来实现,它可以直接接受十六进制颜色值:

    # 初始化地图
    m = folium.Map(location=[df['lat'].mean(), df['lon'].mean()], zoom_start=10)
    
    # 逐行添加渐变圆形标记
    for _, row in df.iterrows():
        marker_color = colormap(row['value'])  # 根据数值获取对应颜色
        folium.CircleMarker(
            location=[row['lat'], row['lon']],
            radius=6,  # 标记大小
            color=marker_color,
            fill=True,
            fill_color=marker_color,
            popup=f"数值: {row['value']}"
        ).add_to(m)
    
    # 把颜色条添加到地图上,方便查看数值对应颜色
    colormap.add_to(m)
    
    # 保存地图
    m.save('gradual_color_map.html')
    

两种方式可以根据你的需求选:离散区间适合分类明确的场景,连续渐变适合展示数值的趋势变化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:07:06