Как я могу вывести значения NaN на печать как особый цвет с imshow в matplotlib?

Я пытаюсь использовать 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, который будет оттянут с особым цветом (например: серый или прозрачный)?

79
задан Adam Fraser 5 April 2010 в 16:44
поделиться

1 ответ

Хм, похоже, я могу использовать для этого замаскированный массив:

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)

Этого должно быть достаточно, хотя я все еще открыт для предложений. :]

76
ответ дан 24 November 2019 в 10:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: