2016-05-30 214 views
2

我用matplotlib.pyplot.pcolor()繪製與matplotlib熱圖:如何更改matplotlib中的顏色映射強度?

import numpy as np 
import matplotlib.pyplot as plt  

np.random.seed(1) 
data = np.sort(np.random.rand(8,12)) 
plt.figure() 
c = plt.pcolor(data, edgecolors='k', linewidths=4, cmap='RdBu', vmin=0.0, vmax=1.0) 
plt.colorbar(c) 
plt.show() 

enter image description here

我怎樣才能改變'RdBu'顏色表的強度?例如,如果顏色是(0, 0, 1),則應該將其轉換爲(0, 0, 0.8)。更一般地說, 如果顏色爲(x, y, z),則應該將其轉換爲(ax, ay, az),其中a是零和1之間的某個標量。

回答

5

這是非常相似富力史丹尼的(編輯:現在太湖)的答案,沒有循環的(在我看來)不必要的複雜性,附加到列表,等等:

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

a = 0.5 

# Get the colormap colors, multiply them with the factor "a", and create new colormap 
my_cmap = plt.cm.RdBu(np.arange(plt.cm.RdBu.N)) 
my_cmap[:,0:3] *= a 
my_cmap = ListedColormap(my_cmap) 

np.random.seed(1) 
data = np.sort(np.random.rand(8,12)) 
plt.figure() 
plt.subplot(121) 
c = plt.pcolor(data, edgecolors='k', linewidths=4, cmap='RdBu', vmin=0.0, vmax=1.0) 
plt.colorbar(c) 
plt.subplot(122) 
c = plt.pcolor(data, edgecolors='k', linewidths=4, cmap=my_cmap, vmin=0.0, vmax=1.0) 
plt.colorbar(c) 
plt.show() 

enter image description here

2

你必須組裝新的基於標準的自定義顏色映射。

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import cm 

np.random.seed(1) 
data = np.sort(np.random.rand(8,12)) 
plt.figure() 
cmap = cm.get_cmap('RdBu', len(data)) # set how many colors you want in color map 
# modify colormap 
alpha = .5 
colors = [] 
for ind in xrange(cmap.N): 
    c = [] 
    for x in cmap(ind)[:3]: c.append(x*alpha) 
    colors.append(tuple(c)) 
my_cmap = matplotlib.colors.ListedColormap(colors, name = 'my_name') 
# plot with my new cmap 
cb = plt.pcolor(data, edgecolors='k', linewidths=4, cmap=my_cmap, vmin=0.0, vmax=1.0) 
plt.colorbar(cb) 
plt.show() 

enter image description here

相關問題