Цветовая карта Python, но со всеми нулевыми значениями, отображаемыми в черный цвет

У меня есть квадратный массив элементов, которые соответствуют узлам решетки. Некоторые из элементов равны нулю, а остальные варьируются от 1 до примерно 2700. Используя imshow и цветовую карту OrRd, я хочу, чтобы все узлы решетки больше 0 отображали соответствующий цвет, но важно, чтобы все узлы со значением 0 были отображается черным цветом. Я попытался определить новую цветовую карту следующим образом:

colors = [(0,0,0)] + [(pylab.cm.OrRd(i)) for i in range(1,256)] 
new_map = matplotlib.colors.LinearSegmentedColormap.from_list('new_map', colors, N=256)

но диапазон значений в моем массиве слишком велик, поэтому многие ненулевые значения отображаются черным цветом.

Большое спасибо.


person Thomas Hopkins    schedule 21.03.2014    source источник


Ответы (1)


Цветовые карты Matplotlib имеют свойства set_bad и set_under, которые можно использовать для этого. В этом примере показано, как использовать set_bad

import matplotlib.pyplot as plt
import numpy as np

# make some data
a = np.random.randn(10,10)

# mask some 'bad' data, in your case you would have: data == 0
a = np.ma.masked_where(a < 0.05, a)

cmap = plt.cm.OrRd
cmap.set_bad(color='black')

plt.imshow(a, interpolation='none', cmap=cmap)

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

Чтобы использовать вариант set_under, вы должны добавить ключевое слово vmin в команду построения графика, а значение параметра должно быть немного выше нуля (но ниже любого другого допустимого значения):

cmap.set_under(color='black')    
plt.imshow(a, interpolation='none', cmap=cmap, vmin=0.0000001)
person Rutger Kassies    schedule 21.03.2014
comment
Спасибо, это идеально - person Thomas Hopkins; 22.03.2014