绘图时 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/vmax
和 cm.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_under
和 set_bad
:
cm.set_bad('white')
cmap.set_under('black')
错误值处理 NaN,set_under
为 -9999.0s 设置额外值。
谢谢你的努力!
我有一个包含 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/vmax
和 cm.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_under
和 set_bad
:
cm.set_bad('white')
cmap.set_under('black')
错误值处理 NaN,set_under
为 -9999.0s 设置额外值。
谢谢你的努力!