NumPy掩盖问题 - 我错过了什么?

时间:2014-02-19 18:04:14

标签: python numpy matplotlib

我正在使用matplotlib绘制饮食信息,其中x轴表示日期范围,y轴表示消耗的卡路里数。不是太复杂,但有一个障碍:并非所有日期都有卡路里信息,最好留下那些而不是做某种插值/平滑。

我发现在这种情况下使用numpy面具的几个很好的例子,但似乎我没有得到一些直接的东西,因为我认为的代码应该产生我想要的结果不会改变任何东西。

看看:

calories_list_ma = np.ma.masked_where(calories_list == 0, calories_list) plt.plot(datetimes_list, calories_list_ma, marker = 'x', color = 'r', ls = '-')

产生这个:Sample Output

我只是希望在9-23的线上有一个未开槽的间隙。

实际上,我知道我使用masked_where必须是不正确的,因为当我打印calories_list_ma.mask时,结果是'False'。不是列表,应该是,显示哪些值被掩盖/取消屏蔽为True和False。

有人能让我直截了当吗?

非常感谢!

2 个答案:

答案 0 :(得分:3)

我猜测你的calories_list是一个列表。如果是列表calories_list == 0将返回一个值,即False,因为列表不等于值0. masked_where然后将尽职地将掩码设置为False,从而导致列表的未屏蔽副本

首先需要calories_list = np.array(calories_list)才能使它成为一个numpy数组。与列表不同,numpy数组具有“广播”功能,calories_list == 0将每个元素单独比较为零。

答案 1 :(得分:-1)

尝试使用

calories_list_ma = np.ma.masked[calories_list == 0]