我正在使用 Matplotlib 绘制时间序列数据,并且序列中缺少一些数据。Matplotlib 隐式地将最后一个连续数据点连接到下一个数据点。但万一数据丢失,情节看起来很丑陋。下面是得到的图。
可以看到,在 4 月 30 日标记附近,数据缺失,Matplotlib 加入点。下图也是数据的散点图。散点图掩盖了这个错误,但在这种情况下,连续的数据点不会是联合的。此外,考虑到涉及大量数据点,散点图非常缓慢。
对于此类问题,推荐的解决方案是什么。
我正在使用 Matplotlib 绘制时间序列数据,并且序列中缺少一些数据。Matplotlib 隐式地将最后一个连续数据点连接到下一个数据点。但万一数据丢失,情节看起来很丑陋。下面是得到的图。
可以看到,在 4 月 30 日标记附近,数据缺失,Matplotlib 加入点。下图也是数据的散点图。散点图掩盖了这个错误,但在这种情况下,连续的数据点不会是联合的。此外,考虑到涉及大量数据点,散点图非常缓慢。
对于此类问题,推荐的解决方案是什么。
如果您可以确定断点应该在哪里,您可以:
np.nan
数据参见例如绘制周期性轨迹。
您可以获得相同的效果scatter
(如果您不想单独缩放每个点的大小或颜色)
ax.plot(x, y, linestyle='none', marker='o')
正如前面的答案所说,您应该在没有数据的地方插入 NaN。这个答案是特定于 Pandas的,并解释了如何轻松实现这一点。任何一个 :
Series.resample()
或者Series.reindex()
最简单的使用方法是resample()
. 对于规则间隔的数据,这是最简洁的方法。所以在你上面的例子中,如果你有 5 分钟的数据,就做data.resample("5 min")
. 这将在缺失值中返回带有“NaT”(时间等效于 NaN)的数据集。
唯一不能很好地工作的情况是当您的样本没有规则间隔时。
另一种方法是reindex()
,它也适用于有序(但非时间序列)数据。因此,例如,如果您有一个使用 0 .. 100 整数索引的数据集,但缺少一些样本,您可以执行data.reindex([0:100])
. 您还可以通过传入函数作为参数来复制resample
with的行为。reindex
pandas.date_range()