如何提取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
相关产品推荐
相关产品推荐

