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

如何基于matplotlib色图为DataFrame的Slope列值分配十六进制颜色码

解决方案

步骤说明

  1. 修正归一化对象的创建:你当前的plt.Normalize参数错误,应传入Slope的最小值和最大值作为归一化区间边界,而非两者相减。
  2. 通过matplotlib色图对象,将归一化后的Slope值映射为RGB颜色,再转换为十六进制格式。
  3. 将生成的十六进制颜色作为新列添加到原DataFrame中。

完整代码示例

import matplotlib.pyplot as plt
import pandas as pd

# 示例数据(替换为你的实际df_slope)
data = {
    'Year': [1970, 1971, 1972, 1973, 1974, 1975, 2021, 2022, 2023],
    'Slope': [0.283962, 0.146310, -0.548499, 0.680444, 0.801810, 0.354132, 0.180423, 0.597477, 0.097228]
}
df_slope = pd.DataFrame(data)

# 1. 创建正确的归一化对象:基于Slope的最小/最大值区间
norm = plt.Normalize(df_slope['Slope'].min(), df_slope['Slope'].max())
# 2. 获取jet色图实例
cmap = plt.get_cmap('jet')

# 3. 为每个Slope值生成十六进制颜色
df_slope['color_hex'] = df_slope['Slope'].apply(
    lambda x: '#%02x%02x%02x' % tuple(int(255*c) for c in cmap(norm(x))[:3])
)

# 输出结果
print(df_slope)

结果示例

Year    Slope  color_hex
0   1970  0.283962  #8aff00
1   1971  0.146310  #00d8ff
2   1972 -0.548499  #00007f
3   1973  0.680444  #ff8000
4   1974  0.801810  #ff0000
5   1975  0.354132  #c4ff00
6   2021  0.180423  #33e1ff
7   2022  0.597477  #ffb300
8   2023  0.097228  #00c3ff

补充说明

  • 替换色图只需修改plt.get_cmap('jet')中的色图名称,比如Reds、viridis等。
  • cmap(norm(x))返回RGBA四元组,取前三个RGB值乘以255转整数后,格式化为十六进制字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:25:07