我有一个包含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/vmax
和cm.set_under
。
但是,在第一种情况下,它产生:
RuntimeWarning:在less中遇到无效值
当我试图掩盖所有值< 9990。
在第二种情况下,显然NaN和-9999.0都被解释为低于所描绘的值范围的范围。
有人知道帮助吗?
答案 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_under
和set_bad
:
cm.set_bad('white')
cmap.set_under('black')
坏值负责NaN,set_under
为-9999.0s设置了额外的值。