绘图时 numpy 数组中 NaN 和 -9999.0 的不同处理

Different handling of NaN and -9999.0 in numpy array when plotting

我有一个包含 np.nan(缺失值)和 -9999.0(或任何其他任意值=> 无法计算的)的 numpy 数组,例如:

arr = array([[ 1.,  2.,  3.,  nan,  4.,  4.],
   [ 3.,  -9999.0,  2.,  1.,  1.,  4.],
   [ nan,  -9999.0,  3.,  1.,  2.,  1.]])

现在我想用 plt.imshow 函数绘制这个数组。例如,所有 NaN 应为 transparent/white,所有 -9999.0 应为黑色。 我已经尝试屏蔽数组,然后使用 set_bad 作为颜色图。除此之外,我还使用了 vmin/vmaxcm.set_under。 但是,在第一种情况下,它会产生: RuntimeWarning:在 less 中遇到无效值 当我试图屏蔽所有 <9990 的值时。 在第二种情况下,显然 NaN 和 -9999.0 都被解释为低于所描述的值范围。 有知道的帮忙吗?

听起来你说 this 对你不起作用,但它似乎对我有用。来自 ipython 笔记本单元格:

% matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
a = np.array([[ 1.,  2.,  3.,  np.nan,  4.,  4.],
   [ 3.,  -9999.0,  2.,  1.,  1.,  4.],
   [ np.nan,  -9999.0,  3.,  1.,  2.,  1.]])
fig, ax = plt.subplots()
masked_array = np.ma.array (a, mask=np.isnan(a))
cmap = matplotlib.cm.autumn
cmap.set_bad('w',1.)
ax.imshow(masked_array, interpolation='nearest', cmap=cmap)

imgur link 因为它不会让我 post 图片因为低代表。

好的,解决方案是同时使用 set_underset_bad:

cm.set_bad('white')
cmap.set_under('black')

错误值处理 NaN,set_under 为 -9999.0s 设置额外值。

谢谢你的努力!