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

如何在Python geoplot中成功应用自定义seaborn调色板

问题描述

制作地图时需使用符合工作样式规范的自定义调色板,目前已通过seaborn成功生成目标调色板,实现代码如下:

detcity =["#004445", "#279989", "#9FD5B3", "#FEB70D", "#18252A", "#F2F2F2"]
detcity = sns.color_palette(detcity)
sns.palplot(sns.color_palette(detcity))

(附自定义调色板预览图)

始终无法找到在geoplot中成功替换默认调色板的正确方法,当前绘图代码如下:

fig,ax = plt.subplots(figsize = (30,30))
gplt.pointplot(
    geo_duplex,
    hue='Close_Year',
    legend = True,
    ax=ax
)

xlim = (-83.2,  -82.9)
ylim = (42.25, 42.45)

ax.set_xlim(xlim)
ax.set_ylim(ylim)
cx.add_basemap(ax, crs=crs)

当前运行输出使用的是geoplot默认调色板,而非创建的自定义调色板,尝试过的多数指定调色板的操作均触发报错,附当前默认配色的输出效果图,寻求可行的解决方案。

可行解决方案

geoplot的pointplot及其他支持颜色映射的图层函数,原生支持通过palette参数传入自定义配色,之前触发报错基本是两个原因:一是传参位置错误,二是连续/离散调色板和hue字段的数据类型不匹配。
按以下步骤修改即可正常加载自定义调色板:

  • 先根据hue字段类型处理调色板格式:如果Close_Year是连续数值型(未做分箱的原始年份值),需要把十六进制颜色列表转为matplotlib可识别的连续色带,不要直接传入seaborn生成的离散调色板对象;如果Close_Year是分类型字段(已做年份分段/分箱),可以直接传入seaborn生成的离散调色板
  • 把处理好的调色板作为palette参数直接传入gplt.pointplot(),不要把该参数嵌套在legend配置项中

修改后的可运行代码:

import matplotlib.pyplot as plt
import seaborn as sns
import geoplot as gplt
import contextily as cx
from matplotlib.colors import LinearSegmentedColormap

# 自定义工作规范配色
detcity_colors = ["#004445", "#279989", "#9FD5B3", "#FEB70D", "#18252A", "#F2F2F2"]

# 连续hue场景(对应原始年份数值):生成连续插值色带
detcity_pal = LinearSegmentedColormap.from_list("detcity", detcity_colors)
# 分类hue场景(对应分箱后的年份类别):替换为下面这行即可
# detcity_pal = sns.color_palette(detcity_colors)

fig,ax = plt.subplots(figsize = (30,30))
gplt.pointplot(
    geo_duplex,
    hue='Close_Year',
    palette=detcity_pal, # 传入自定义调色板
    legend = True,
    ax=ax
)

xlim = (-83.2,  -82.9)
ylim = (42.25, 42.45)

ax.set_xlim(xlim)
ax.set_ylim(ylim)
# 注意crs参数必须和矢量数据geo_duplex的坐标系保持一致,避免底图偏移
cx.add_basemap(ax, crs=geo_duplex.crs)
plt.show()

常见报错排查

  • 报“颜色数量和数据类别不匹配”错误:是因为把离散调色板传给了连续型hue字段,换成上面的连续色带写法即可
  • 旧版本geoplot不识别seaborn调色板对象:直接传入原始十六进制颜色列表,或者转成LinearSegmentedColormap对象即可兼容
  • 调色板不生效:检查是否把palette参数错写到了legend配置的字典里,必须作为pointplot的顶层参数传入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 02:03:50