指定颜色和测量颜色之间的差异,matplotlib色彩映射

时间:2017-07-03 13:38:07

标签: python matplotlib colormap

我无法复制我在matplotlib中使用过的旧色图。它似乎是默认的色彩映射,因为在原始代码中,没有指定色彩映射。

所以,看看我制作的旧图,我使用colorbar测量了gpick的颜色。我将这些输入到自定义色彩映射中,如下所示:

blue_red1 = LinearSegmentedColormap.from_list('mycmap', [
    (0,      '#6666de'),
    (0.1428, '#668cff'), 
    (0.2856, '#66d9ff'), 
    (0.4284, '#92ffce'), 
    (0.5712, '#d0ff90'), 
    (0.714,  '#ffe366'), 
    (0.8568, '#ff9b66'), 
    (1,      '#db6666')])

CS = plt.contourf(H, temps, diff_list, cmap=blue_red1)
plt.savefig('out.png')

然而,当我再次使用gpick测量输出颜色时,它们具有不同的十六进制值(我可以说它们不同)。

导致这种情况的原因是什么?

原始我正在尝试复制,自定义颜色映射的输出链接如下:

original

replicate

1 个答案:

答案 0 :(得分:1)

您可以使用以下方法更接近所需的结果。 逻辑是颜色条中的每种颜色都是与其间隔的平均值相对应的值。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

X,Y=np.meshgrid(np.linspace(0,1),np.linspace(0,1) )
Z = X+Y

blue_red1 = LinearSegmentedColormap.from_list('mycmap', [
    (0.0000, '#6666de'),
    (0.0625, '#6666de'),
    (0.1875, '#668cff'),
    (0.3125, '#66d9ff'), 
    (0.4375, '#92ffce'), 
    (0.5625, '#d0ff90'), 
    (0.6875, '#ffe366'), 
    (0.8125, '#ff9b66'), 
    (0.9375, '#db6666'), 
    (1.0000, '#db6666')])

CS = plt.contourf(X,Y,Z, cmap=blue_red1)
plt.colorbar()
plt.show()

enter image description here

另一种选择是使用ListedColormap。这样可以得到准确的颜色。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap

X,Y=np.meshgrid(np.linspace(0,1),np.linspace(0,1) )
Z = X+Y

blue_red1 = ListedColormap(['#6666de','#668cff','#66d9ff','#92ffce','#d0ff90',
                            '#ffe366','#ff9b66','#db6666'],'mycmap')

CS = plt.contourf(X,Y,Z, cmap=blue_red1)
plt.colorbar()
plt.show()

enter image description here