Диаграмма изображения Matplotlib - значения нанограмм показаны как наименьший цвет цветовых карт вместо прозрачных - PullRequest
0 голосов
/ 26 сентября 2019

Я использую matplotlib 3.0.3 и хочу создать анимацию графических изображений с помощью модуля FuncAnimation.Для скорости печати я обновляю данные изображения, используя im.set_data для imshow и im.set_array() для plt.pcolormesh (set_data недоступно в качестве атрибута).Если я частично обновляю данные значениями NaN, imshow отображает их в виде пустых пикселей, а pcolormesh показывает их как самый низкий цвет из цветовой карты (синий для viridis).

Это предназначено иесли нет, то почему это поведение?Это похоже на set_array(), поскольку pcolormesh обычно отображает NaN в виде пустых пикселей.

Минимальный пример:

import numpy as np
import matplotlib.pyplot as plt

fig1 = plt.figure()
im1 = plt.pcolormesh(np.random.rand(10,10))
im1.set_array((np.zeros((10,10)) * np.nan).ravel())

fig2 = plt.figure()
im2 = plt.imshow(np.random.rand(10,10))
im2.set_data(np.zeros((10,10)) * np.nan)

1 Ответ

1 голос
/ 26 сентября 2019

Изображения Matplotlib плохо работают с nan с.Вместо этого следует использовать маскированные массивы.Тогда оба случая одинаковы (за исключением необходимости выравнивать массив pcolormesh).

import numpy as np
import matplotlib.pyplot as plt

A = np.random.rand(10,10)
B = np.ma.array(A, mask=np.ones((10,10)))

fig1 = plt.figure()
im1 = plt.pcolormesh(A)
im1.set_array(B.ravel())
plt.colorbar()

fig2 = plt.figure()
im2 = plt.imshow(A)
im2.set_array(B)
plt.colorbar()

plt.show() 
...