Как изменить интенсивность цветовой карты в matplotlib?

Я использую 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()

введите описание изображения здесь

Как я могу изменить интенсивность цветовой карты 'RdBu'? Например, если цвет (0, 0, 1), он должен быть преобразован в (0, 0, 0.8). В более общем случае, если цвет равен (x, y, z), он должен быть преобразован в (ax, ay, az), где a — некоторый скаляр между нулем и единицей.


person Franck Dernoncourt    schedule 30.05.2016    source источник


Ответы (2)


Это очень похоже на ответ 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()

введите здесь описание изображения

person Bart    schedule 30.05.2016

Вы должны собрать новую пользовательскую карту цветов на основе стандарта.

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()

введите здесь описание изображения

person Serenity    schedule 30.05.2016