Я пытаюсь использовать imshow в matplotlib для отображения данных на графике как heatmap, но некоторыми значениями является NaNs. Я хотел бы, чтобы NaNs был представлен как особый цвет, не найденный в карте цветов.
пример:
import numpy as np
import matplotlib.pyplot as plt
f = plt.figure()
ax = f.add_subplot(111)
a = np.arange(25).reshape((5,5)).astype(float)
a[3,:] = np.nan
ax.imshow(a, interpolation='nearest')
f.canvas.draw()
Результирующее изображение является неожиданно полностью синим (самый низкий цвет в струйной карте цветов). Однако, если я делаю графическое изображение как это:
ax.imshow(a, interpolation='nearest', vmin=0, vmax=24)
- затем я получаю что-то лучше, но значения NaN оттянуты тот же цвет как vmin... Есть ли корректный способ, которым я могу установить NaNs, который будет оттянут с особым цветом (например: серый или прозрачный)?
Хм, похоже, я могу использовать для этого замаскированный массив:
masked_array = np.ma.array (a, mask=np.isnan(a))
cmap = matplotlib.cm.jet
cmap.set_bad('white',1.)
ax.imshow(masked_array, interpolation='nearest', cmap=cmap)
Этого должно быть достаточно, хотя я все еще открыт для предложений. :]