我想从离散颜色列表中创建线性颜色图,并提取基础RGB值。我已经设法使用matplotlib文档中的示例脚本执行第一步。
from matplotlib import cm
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap
colors = [(1, 0, 0), (0, 1, 0), (0, 0, 1)]
colormap = LinearSegmentedColormap.from_list('colormapX', colors, N=100)
x = np.arange(0, np.pi, 0.1)
y = np.arange(0, 2*np.pi, 0.1)
X, Y = np.meshgrid(x, y)
Z = np.cos(X) * np.sin(Y) * 10
fig, ax = plt.subplots()
im = ax.imshow(Z, interpolation='nearest', origin='lower', cmap=colormap)
fig.colorbar(im, ax=ax)
plt.show()
此色彩图基于100种颜色,这些颜色源自原始三种颜色的插值。如何使用这100种颜色的RGB值提取ndarray?
答案 0 :(得分:1)
不知道它是否可以直接在某个地方使用,或者是否可以要求colormap
评估给定值(返回与给定数字相对应的颜色),但是您可以自己制作这个简单的列表情况下:
def color_interpolation(c1, c2, fraction=0.5):
return ((1.-fraction)*c1[0] + fraction*c2[0],
(1.-fraction)*c1[1] + fraction*c2[1],
(1.-fraction)*c1[2] + fraction*c2[2],)
def make_color_interpolation_list(colors, N):
n_colors = len(colors)
n_steps_between_colors = N/(n_colors-1)
fraction_step = 1. / n_steps_between_colors
color_array = np.zeros((N,3))
color_index = 0
while color_index < n_colors-1:
fraction_index = 0
while fraction_index < n_steps_between_colors:
index = color_index*n_steps_between_colors+fraction_index
color_array[index]= color_interpolation(c1=colors[color_index],
c2=colors[color_index+1],
fraction=fraction_index*fraction_step)
fraction_index += 1
color_index += 1
if index != len(color_array)-1:
color_array[-1] = colors[-1]
return color_array