我正在使用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 = '-')
产生这个:
我只是希望在9-23的线上有一个未开槽的间隙。
实际上,我知道我使用masked_where必须是不正确的,因为当我打印calories_list_ma.mask时,结果是'False'。不是列表,应该是,显示哪些值被掩盖/取消屏蔽为True和False。
有人能让我直截了当吗?
非常感谢!
答案 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]