使用Matplotlib Python进行绘图时跳过缺少的时间戳记

时间:2019-11-27 14:50:34

标签: python pandas matplotlib python-datetime

我有一个来自实验的数据集,该数据集每秒记录10个读数,即每分钟600个读数。数据是1个月的数据,但缺少一些日期,我假设这些天的读数已关闭。 当我使用matplotlib绘制此读数与时间的关系图时,会画一条线连接上一个可用日期和下一个可用日期。

enter image description here

但是,我希望显示一个空白,而不是此行,以便查看者可以清楚地看到那些天的数据不可用。

我正在使用Matplotlib和Python 3进行绘制。

这是数据的样子

timestamp,x
2019-09-03 18:33:38,17.546
2019-09-03 18:33:38,17.546
2019-09-03 18:33:39,17.546
2019-09-03 18:33:39,17.555999999999997
2019-09-03 18:33:39,17.589000000000002
2019-09-03 18:33:39,17.589000000000002
2019-09-03 18:33:39,17.589000000000002
2019-09-03 18:33:39,17.589000000000002
2019-09-03 18:33:39,17.593
2019-09-03 18:33:39,17.595
2019-09-03 18:33:40,17.594

2 个答案:

答案 0 :(得分:1)

我认为在这种情况下,您应该通过以10Hz重新采样数据帧来将丢失的数据 add 添加到数据帧中

paint

enter image description here

答案 1 :(得分:1)

基于@Diziet Asahi答案的另一个选项是将图形绘制为散点图而不是线条。这应该适用于单个x值的多个数据点。由于您对数据进行了大量采样,因此无论如何它可能具有与线条相似的视觉效果。

import matplotlib.pylab as plt
%matplotlib inline
import pandas as pd

# first bit of code copied from @Diziet's answer
df = pd.concat([pd.DataFrame([10]*600, index=pd.date_range(start='2018-01-01 00:00:00', periods=600, freq='0.1S')),
                pd.DataFrame([20]*600, index=pd.date_range(start='2018-01-01 00:01:10', periods=600, freq='0.1S'))])

df2 = df.resample('0.1S').asfreq()

# plot three times, twice using different settings using the original data, 
# once using resampled data
fig, (ax1, ax2, ax3) = plt.subplots(1,3, figsize=(8,4))
df.plot(ax=ax1)
df.plot(ax=ax2, marker='.', linestyle='')
df2.plot(ax=ax3)

enter image description here