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

Matplotlib imshow - стандартная нормализация цвета

У меня постоянно возникают проблемы с моими цветовыми картами при использовании imshow, некоторые цвета кажутся просто черными. Я наконец понял, что imshow по умолчанию, по умолчанию, нормализует матрицу значений с плавающей запятой, которую я им даю.

Я бы ожидал, что массив, такой как [[0,0.25],[0.5,0.75]], отобразит соответствующие цвета с карты, соответствующие этим абсолютным значениям, но 0.75 будет интерпретироваться как 1. В крайнем случае массив N x N равный 0.2 (например), просто произведет один большой черный квадрат, а не то, что можно было бы ожидать 0,2, чтобы соответствовать цветной карте (возможно, 20% серой).

Есть ли способ предотвратить такое поведение? Это особенно раздражает, когда пользовательские цветовые карты имеют много разрывов, небольшое изменение масштаба может привести к полному изменению всех цветов.

4b9b3361

Ответ 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