Geopandas地图颜色设置问题:自定义颜色与实际显示不匹配
解决Geopandas地图颜色与指定值不匹配的问题
核心问题分析
你的代码有两个关键错误导致颜色不匹配:
- 使用
explore时,当column是存储颜色字符串的列,不需要指定cmap参数——你额外传入sorted(colors)会强制Geopandas把颜色字符串当作分类标签,用排序后的颜色列表重新映射,完全打乱了你手动分配的对应关系。 - 速度区间存在重叠:最后一个条件
between(40, np.inf, inclusive="right")和上一个区间31-40(右包含)重复,导致速度为40的行会匹配到上一个条件,而不是最后一个,颜色分配逻辑出错。
修正后的代码
import numpy as np import geopandas as gpd def speed_map(df, time): x = df[df['time_zone'] == time] # 修复区间重叠,把最后一个区间改成大于40,避免和上一个区间的40重复匹配 conditions = [ x["speed_KM"].between(0, 5, inclusive="right"), x["speed_KM"].between(6, 10, inclusive="right"), x["speed_KM"].between(11, 15, inclusive="right"), x["speed_KM"].between(16, 20, inclusive="right"), x["speed_KM"].between(21, 25, inclusive="right"), x["speed_KM"].between(26, 30, inclusive="right"), x["speed_KM"].between(31, 40, inclusive="right"), x["speed_KM"] > 40 # 替换原来的重叠区间条件 ] colors = ["black", "darkred", "red", "blue", "purple", "orange", "yellow", "green"] x["color"] = np.select(conditions, colors, default="gray") # 移除cmap参数,直接使用color列的颜色值 m = x.explore(column="color", legend=False) return m
关键修改说明
- 移除
cmap参数:当column传入的是具体颜色值(如"black"、"red"这类CSS颜色字符串),explore会直接应用这些颜色,不需要颜色映射表。 - 修复区间重叠:把最后一个条件改为
x["speed_KM"] >40,确保每个速度值只匹配一个区间,颜色分配逻辑准确。
内容的提问来源于stack exchange,提问作者tekelulo
相关产品推荐
相关产品推荐

