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

如何提取LinearSegmentedColormap的RGB值

如何提取LinearSegmentedColormap的RGB值

嘿,我之前也被这个问题卡过一阵!ListedColorMap直接用colors属性就能拿到RGB值,但像PiYG、hsv这类LinearSegmentedColormap是通过分段线性插值动态生成颜色的,确实没有预存的colors数组。不过有两个简单的方法能搞定这个问题,我给你慢慢说:


方法一:直接调用Colormap生成采样值

LinearSegmentedColormap的核心逻辑是根据0到1之间的数值插值生成颜色,所以我们可以先生成一批均匀分布的采样点,再调用colormap对象来获取对应的RGB值:

import matplotlib.pyplot as plt
import numpy as np

# 获取你需要的LinearSegmentedColormap
col_map = plt.get_cmap('hsv')

# 生成0到1之间的256个均匀采样点(和ListedColorMap默认长度一致)
sample_points = np.linspace(0, 1, 256)

# 调用colormap获取RGBA值,取前3个通道得到RGB
rgb_values = col_map(sample_points)[:, :3]

# 转换为0-255范围的整数
rgb_255 = (rgb_values * 255).astype(int)

这里要注意,col_map(sample_points)返回的是形状为(256, 4)的数组,第四列是透明度(alpha通道),所以我们用[:, :3]只保留RGB三个通道。


方法二:将其转换为ListedColorMap再用colors属性

如果你习惯了用colors属性的处理方式,还可以把LinearSegmentedColormap重采样为ListedColorMap,这样就能完全复用你之前的代码逻辑:

import matplotlib.pyplot as plt
import numpy as np

col_map = plt.get_cmap('PiYG')

# 重采样为256个颜色的ListedColorMap
resampled_cmap = col_map.resampled(256)

# 现在就可以像处理ListedColorMap一样用colors属性了
rgb_255 = []
for color in resampled_cmap.colors:
    r = int(255 * color[0])
    g = int(255 * color[1])
    b = int(255 * color[2])
    rgb_255.append((r, g, b))

resampled(n)方法会根据原LinearSegmentedColormap的插值规则,生成包含n个颜色的ListedColorMap对象,完美适配你之前的处理流程。


不管用哪种方法,都能得到你需要的0-255范围的RGB整数数组,和处理ListedColorMap的逻辑保持一致。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 11:18:00