Цветовая карта 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)
но диапазон значений в моем массиве слишком велик, и поэтому многие ненулевые значения отображаются черным.
Большое спасибо.
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)