我正在使用Matplotlib绘制时间序列数据,并且序列中缺少一些数据。 Matplotlib隐式加入最后一个连续数据点到下一个。但是如果数据丢失,情节看起来很难看。以下是获得的情节。
可以看出,在4月30日标记附近,数据丢失,Matplotlib加入了这些点。 以下图像是数据的散点图。散点图掩盖了此故障,但在这种情况下,连续的数据点将不会联合。此外,考虑到涉及大量数据点,散点图非常慢。
针对此类问题的推荐解决方案是什么。
答案 0 :(得分:9)
如果你能确定断点应该在哪里,你可以:
np.nan
醇>
请参阅示例Plot periodic trajectories。
你可以使用scatter
获得相同的效果(如果你不想独立地缩放每个点的大小或颜色)
ax.plot(x, y, linestyle='none', marker='o')
答案 1 :(得分:4)
如前面的答案所述,您应该在没有数据的地方插入NaN。 此答案特定于Pandas ,并解释了如何轻松实现这一目标。要么:
Series.resample()
或Series.reindex()
最简单的方法是resample()
。对于规则间隔数据,这是最简洁的方法。所以在上面的示例中,如果您有例如5分钟数据,只需data.resample("5 min")
。这将使您的数据集返回缺少值中的“NaT”(时间相当于NaN)。
唯一不适用的情况是样品间距不规则。
替代方案是reindex()
,它也适用于有序(但非时间序列)数据。因此,例如,如果您的数据集索引为0到100之间的整数,但缺少一些样本,则可以执行data.reindex([0:100])
。您还可以通过传入resample
函数作为参数来复制reindex
与pandas.date_range()
的行为。