2017-07-03 160 views
0

我无法复制我在matplotlib中使用的旧颜色映射。它好像是默认的颜色映射,因为在原始代码中没有指定颜色映射。指定颜色和测量颜色之间的差异,matplotlib颜色映射

因此,看着我制作的旧图,我使用gpick测量了colorbar的颜色。我已经输入到这些自定义颜色表如下:

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

你可能会得到更接近使用期望的结果以下。 逻辑是颜色条中的每种颜色都是与其间隔的平均值相对应的值。

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