如何基于matplotlib色图为DataFrame的Slope列值分配十六进制颜色码
解决方案
步骤说明
- 修正归一化对象的创建:你当前的
plt.Normalize参数错误,应传入Slope的最小值和最大值作为归一化区间边界,而非两者相减。 - 通过matplotlib色图对象,将归一化后的Slope值映射为RGB颜色,再转换为十六进制格式。
- 将生成的十六进制颜色作为新列添加到原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
相关产品推荐
相关产品推荐

