我想创建一种新的颜色地图,可以在绿色和蓝色(或其他两种颜色)之间进行插值。我的目标是获得像这样的效果:
首先,我真的不确定是否可以使用蓝色和绿色的线性插值来实现这个目标。如果可以,我不知道该如何操作。我在这里找到了一些使用matplotlib方法插入指定RGB值的文档。
真正麻烦的是理解下面的“cdict2”是如何工作的。例如,文档中说:
“举个例子:假设您希望红色在底半部分从0增加到1,在中间半部分绿色也这样做,在顶部半部分则使用蓝色。那么您将使用以下代码:”
from matplotlib import pyplot as plt
import matplotlib
import numpy as np
plt.figure()
a=np.outer(np.arange(0,1,0.01),np.ones(10))
cdict2 = {'red': [(0.0, 0.0, 0.0),
(0.5, 1.0, 1.0),
(1.0, 1.0, 1.0)],
'green': [(0.0, 0.0, 0.0),
(0.25, 0.0, 0.0),
(0.75, 1.0, 1.0),
(1.0, 1.0, 1.0)],
'blue': [(0.0, 0.0, 0.0),
(0.5, 0.0, 0.0),
(1.0, 1.0, 1.0)]}
my_cmap2 = matplotlib.colors.LinearSegmentedColormap('my_colormap2',cdict2,256)
plt.imshow(a,aspect='auto', cmap =my_cmap2)
plt.show()
编辑:我现在明白了插值是如何工作的,例如,这将给出从红色到白色的插值:
从白色到红色:对于每种颜色,按照“矩阵”的列向下进行,第一列是我们想要插值开始和结束的x坐标,另外两列是该坐标处颜色值的实际值。
cdict2 = {'red': [(0.0, 1.0, 1.0),
(1.0, 1.0, 1.0),
(1.0, 1.0, 1.0)],
'green': [(0.0, 1.0, 1.0),
(1.0, 0.0, 0.0),
(1.0, 0.0, 0.0)],
'blue': [(0.0, 1.0, 1.0),
(1.0, 0.0, 0.0),
(1.0, 0.0, 0.0)]}
显然,在RGB空间内插值创建我需要的渐变将非常困难...