Matplotlib图像图-nan值显示为颜色图的最低颜色,而不是透明的

时间:2019-09-26 12:59:46

标签: python matplotlib plot color-mapping

我正在使用matplotlib 3.0.3,并想使用FuncAnimation模块创建图像绘图的动画。为了提高绘图速度,我使用im.set_data的{​​{1}}和imshow的{​​{1}}更新图像数据(im.set_array()作为属性不可用)。如果我用NaN值部分更新数据,则plt.pcolormesh将它们显示为空白像素,而set_data将它们显示为颜色图中的最低颜色(imshow为蓝色)。

这是故意的吗?如果不是,这是为什么呢?这似乎与pcolormesh有关,因为viridis通常会将NaN绘制为空白像素。

最小示例:

set_array()

1 个答案:

答案 0 :(得分:1)

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()