Matplotlib去除缺失数据的插值

10
我正在使用Matplotlib绘制时间序列数据,但一些数据在序列中缺失。 Matplotlib会隐式地将最后一个连续数据点与下一个数据点连接起来。但是如果数据缺失,则绘图看起来很丑陋。以下是所得到的图,可以看出在4月30日标记附近存在数据缺失,而Matplotlib连接了这些点。 进入图像描述 此外,以下图像是数据的散点图。散点图覆盖了此问题,但在这种情况下,连续的数据点不会被连接。此外,考虑到涉及的大量数据点,散点图非常慢。 进入图像描述 对于这种问题,建议采用什么样的解决方案?
2个回答

13

如果您能确定应该在哪些位置断开数据,您可以选择以下方法之一:

  1. 手动分割数据并绘制每个“部分”
  2. 在间隙处的数据中插入np.nan

例如,请参见绘制周期轨迹

如果您不想独立缩放每个点的大小或颜色,则可以使用相同效果的scatter函数。

ax.plot(x, y, linestyle='none', marker='o')

最终使用了 Pandas,它会插入 NaN。 - Nipun Batra
@NipunBatra 如果你做了不同的事情,你应该将其写成答案并接受自己的答案。 - tacaswell

5
正如之前的回答所述,您应该在没有数据的地方插入NaNs。此回答是特别针对Pandas的,并解释了如何轻松实现这一点。可以使用以下任一方法:
- Series.resample() - Series.reindex()
最简单的方法是使用resample()。这是定期间隔数据的最简洁方式。因此,在您上面的示例中,如果您有例如5分钟的数据,只需执行data.resample("5 min")。这将在缺失值中返回'NaT'(等效于NaN的时间)。
唯一不太适用的情况是当样本不是定期间隔时。
另一个选择是reindex(),它也适用于有序(但非时间序列)数据。因此,例如,如果您有一个以0..100为整数索引的数据集,但有一些缺失的样本,您可以执行data.reindex([0:100])。您还可以通过将pandas.date_range()函数作为参数传递给reindex()来复制resample()的行为。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接