绘制时在numpy数组中对NaN和-9999.0的不同处理

时间:2015-09-12 11:54:06

标签: python numpy nan imshow

我有一个包含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应为透明/白色,所有-9999.0都应为黑色。 我已经尝试屏蔽数组,然后使用set_bad作为色彩映射。除此之外,我使用了vmin/vmaxcm.set_under。 但是,在第一种情况下,它产生:     RuntimeWarning:在less中遇到无效值 当我试图掩盖所有值< 9990。 在第二种情况下,显然NaN和-9999.0都被解释为低于所描绘的值范围的范围。 有人知道帮助吗?

2 个答案:

答案 0 :(得分: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因为它不会因为低代表而发布图片。

答案 1 :(得分:0)

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

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

坏值负责NaN,set_under为-9999.0s设置了额外的值。

无论如何,谢谢你的努力!