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

如何基于另一列值为Folium地图标记分配颜色?

解决方案

方法1:颜色映射字典直接分配

先给每个聚类标签绑定对应颜色,循环时直接取当前行标签对应的颜色值即可:

# 创建地图
m = folium.Map(location=[40, -90], zoom_start=4)

# 定义6个聚类的颜色映射,可根据需求替换颜色
color_map = {
    0: 'blue',
    1: 'red',
    2: 'green',
    3: 'purple',
    4: 'orange',
    5: 'darkred'
}

# 遍历数据添加标记
for idx, row in df4.iterrows():
    folium.Marker(
        location=[row['LAT'], row['LNG']],
        popup=str(row['uID']),
        # 通过Icon类设置标记颜色
        icon=folium.Icon(color=color_map[row['cluster_label']])
    ).add_to(m)

# 显示地图
m

方法2:函数动态分配颜色

如果需要更灵活的颜色逻辑(比如自动适配聚类数量),可以用函数封装颜色分配规则:

# 创建地图
m = folium.Map(location=[40, -90], zoom_start=4)

def get_cluster_color(label):
    # 定义颜色列表,数量对应聚类数
    colors = ['blue', 'red', 'green', 'purple', 'orange', 'darkred']
    # 标签超出范围时返回默认灰色
    return colors[label] if label < len(colors) else 'gray'

# 遍历添加标记
for idx, row in df4.iterrows():
    marker_color = get_cluster_color(row['cluster_label'])
    folium.Marker(
        location=[row['LAT'], row['LNG']],
        popup=str(row['uID']),
        icon=folium.Icon(color=marker_color)
    ).add_to(m)

# 显示地图
m

关键注意点

  • 之前的报错是因为你把整个df4['cluster_label'](Series对象)传给了颜色参数,而folium需要单个字符串格式的颜色值,必须取循环中当前行的标签值。
  • folium的Marker本身没有color参数,颜色需要通过folium.Icon类来设置,这是你之前尝试函数方案失败的核心原因。
  • 用iterrows()遍历数据行比range(len(df4))加iloc更简洁易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:25:11