Как я могу изменить интенсивность цветовой карты в 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' Colormap? Например, если цвет (0, 0, 1)должно быть преобразовано в (0, 0, 0.8), В целом, если цвет (x, y, z)должно быть преобразовано в (ax, ay, az), где a это некоторый скаляр от нуля до единицы.

2 ответа

Решение

Это очень похоже на ответ Стэнли Р. (правка: теперь 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()

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

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

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

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

Другие вопросы по тегам