10

我正在使用 Matplotlib 绘制时间序列数据,并且序列中缺少一些数据。Matplotlib 隐式地最后一个连续数据点连接到下一个数据点。但万一数据丢失,情节看起来很丑陋。下面是得到的图。 在此处输入图像描述

可以看到,在 4 月 30 日标记附近,数据缺失,Matplotlib 加入点。下图也是数据的散点图。散点图掩盖了这个错误,但在这种情况下,连续的数据点不会是联合的。此外,考虑到涉及大量数据点,散点图非常缓慢。 在此处输入图像描述

对于此类问题,推荐的解决方案是什么。

4

2 回答 2

13

如果您可以确定断点应该在哪里,您可以:

  1. 打破数据并手动绘制每个“部分”
  2. 在空白处插入np.nan数据

参见例如绘制周期性轨迹

您可以获得相同的效果scatter(如果您不想单独缩放每个点的大小或颜色)

ax.plot(x, y, linestyle='none', marker='o')
于 2013-05-09T04:09:34.670 回答
5

正如前面的答案所说,您应该在没有数据的地方插入 NaN。这个答案是特定于 Pandas的,并解释了如何轻松实现这一点。任何一个 :

  • Series.resample() 或者
  • Series.reindex()

最简单的使用方法是resample(). 对于规则间隔的数据,这是最简洁的方法。所以在你上面的例子中,如果你有 5 分钟的数据,就做data.resample("5 min"). 这将在缺失值中返回带有“NaT”(时间等效于 NaN)的数据集。

唯一不能很好地工作的情况是当您的样本没有规则间隔时。

另一种方法是reindex(),它也适用于有序(但非时间序列)数据。因此,例如,如果您有一个使用 0 .. 100 整数索引的数据集,但缺少一些样本,您可以执行data.reindex([0:100]). 您还可以通过传入函数作为参数来复制resamplewith的行为。reindexpandas.date_range()

于 2014-02-27T09:56:22.547 回答