Matplotlib imshow - стандартная нормализация цвета
У меня постоянно возникают проблемы с моими цветовыми картами при использовании imshow
, некоторые цвета кажутся просто черными. Я наконец понял, что imshow
по умолчанию, по умолчанию, нормализует матрицу значений с плавающей запятой, которую я им даю.
Я бы ожидал, что массив, такой как [[0,0.25],[0.5,0.75]]
, отобразит соответствующие цвета с карты, соответствующие этим абсолютным значениям, но 0.75 будет интерпретироваться как 1. В крайнем случае массив N x N равный 0.2 (например), просто произведет один большой черный квадрат, а не то, что можно было бы ожидать 0,2, чтобы соответствовать цветной карте (возможно, 20% серой).
Есть ли способ предотвратить такое поведение? Это особенно раздражает, когда пользовательские цветовые карты имеют много разрывов, небольшое изменение масштаба может привести к полному изменению всех цветов.
Ответы
Ответ 1
Просто укажите vmin=0, vmax=1
.
По умолчанию imshow
нормализует данные до его min и max. Вы можете контролировать это с помощью аргументов vmin
и vmax
или с аргументом norm
(если вы хотите нелинейное масштабирование).
В качестве быстрого примера:
import matplotlib.pyplot as plt
data = [[0, 0.25], [0.5, 0.75]]
fig, ax = plt.subplots()
im = ax.imshow(data, cmap=plt.get_cmap('hot'), interpolation='nearest',
vmin=0, vmax=1)
fig.colorbar(im)
plt.show()
![enter image description here]()