如何在matplotlib中更改色彩映射的强度?

Fra*_*urt 2 python matplotlib colormap

我使用matplotlib.pyplot.pcolor()来绘制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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何更改'RdBu'色彩图的强度?例如,如果颜色是(0, 0, 1),则应将其转换为(0, 0, 0.8).更一般地说,如果颜色是(x, y, z),它应该被转换成(ax, ay, az),其中a一些标量在0和1之间.

Bar*_*art 5

这与Stanley R(编辑:现在的Serenity)的答案非常相似,没有(在我看来)不必要的循环复杂性,附加到列表等等:

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()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述