【发布时间】:2014-10-29 09:37:11
【问题描述】:
我想创建一个在绿色和蓝色(或任何其他两种颜色)之间插值的新颜色图。我的目标是得到类似的东西:
首先,我真的不确定这是否可以使用蓝色和绿色的线性插值来完成。如果可以,我不知道该怎么做,我找到了一些关于使用 matplotlib 方法插入指定 RGB 值的文档here
真正的麻烦在于理解下面的“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 空间中插值来创建...
【问题讨论】:
-
Check out this link 关于命名颜色。那里有显示规范方法之间转换的代码。 I also think this link 关于颜色条可能会有所帮助。
-
你是如何创建示例渐变的?它远非线性。
-
是的,它只是一个屏幕截图,说明了我想要什么。我没有创建它。我想知道 Python 是否有一些函数可以促进这些渐变......
-
what 的屏幕截图?
-
我可以尝试找到我从中获取的幻灯片,如果这有帮助的话,但我只记得上面写着“这是一个颜色渐变的示例”