Matplotlib删除缺失数据的插值

时间:2013-05-09 04:07:40

标签: python matplotlib time-series scatter-plot

我正在使用Matplotlib绘制时间序列数据,并且序列中缺少一些数据。 Matplotlib隐式加入最后一个连续数据点到下一个。但是如果数据丢失,情节看起来很难看。以下是获得的情节。 enter image description here

可以看出,在4月30日标记附近,数据丢失,Matplotlib加入了这些点。 以下图像是数据的散点图。散点图掩盖了此故障,但在这种情况下,连续的数据点将不会联合。此外,考虑到涉及大量数据点,散点图非常慢。 enter image description here

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

2 个答案:

答案 0 :(得分:9)

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

  1. 打破数据并手动绘制每个“部分”
  2. 在空白
  3. 中的数据中插入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函数作为参数来复制reindexpandas.date_range()的行为。