Подтвердить что ты не робот

Определение дискретной цветовой схемы для imshow в matplotlib

У меня есть простой образ, который я показываю с imshow в matplotlib. Я хотел бы применить пользовательскую цветовую палитру так, чтобы значения между 0-5 были белыми, 5-10 - красными (очень простые цвета) и т.д. Я пробовал следовать этому руководству:

http://assorted-experience.blogspot.com/2007/07/custom-colormaps.html со следующим кодом:

cdict = {
'red'  :  ((0., 0., 0.), (0.5, 0.25, 0.25), (1., 1., 1.)),
'green':  ((0., 1., 1.), (0.7, 0.0, 0.5), (1., 1., 1.)),
'blue' :  ((0., 1., 1.), (0.5, 0.0, 0.0), (1., 1., 1.))
}

my_cmap = mpl.colors.LinearSegmentedColormap('my_colormap', cdict, 3)

plt.imshow(num_stars, extent=(min(x), max(x), min(y), max(y)), cmap=my_cmap)
plt.show()

Но это в конечном итоге показывает странные цвета, и мне нужны только 3-4 цвета, которые я хочу определить. Как это сделать?

4b9b3361

Ответ 1

Вы можете использовать ListedColormap, чтобы указать белый и красный как единственные цвета на карте цветов, а границы определяют, где переход от одного цвета к другому:

import matplotlib.pyplot as plt
from matplotlib import colors
import numpy as np

np.random.seed(101)
zvals = np.random.rand(100, 100) * 10

# make a color map of fixed colors
cmap = colors.ListedColormap(['white', 'red'])
bounds=[0,5,10]
norm = colors.BoundaryNorm(bounds, cmap.N)

# tell imshow about color map so that only set colors are used
img = plt.imshow(zvals, interpolation='nearest', origin='lower',
                    cmap=cmap, norm=norm)

# make a color bar
plt.colorbar(img, cmap=cmap, norm=norm, boundaries=bounds, ticks=[0, 5, 10])

plt.savefig('redwhite.png')
plt.show()

Результирующая фигура имеет только два цвета:

enter image description here

Я предложил, по сути, одно и то же для несколько иного вопроса: 2D-визуализация сетки в Python

Решение основано на примере matplotlib. В этом примере объясняется, что bounds должен быть больше, чем количество используемых цветов.

BoundaryNorm - это нормализация, которая отображает ряд значений в целые числа, которые затем используются для назначения соответствующих цветов. cmap.N, в приведенном выше примере просто определяет количество цветов.