2017-07-03 206 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