如何绘制具有不同时间间隔的两个数据集,并让它们在Python Matplotlib中共享轴

时间:2016-06-24 01:51:38

标签: python datetime matplotlib

我有两个数据集,A和B:

设置A:
日期时间 数据
6/21/2016 00:00:01 1
6/21/2016 01:00:00 2
6/21/2016 02:03:00 3

设置B:
日期时间 数据
2016/6/21 00:01:10 10
6/21/2016 01:02:00 20
6/21/2016 01:23:00 30
6/21/2016 01:30:00 40
6/21/2016 02:01:00 50

我可以在两个单独的图上绘制两组,其开始和结束时间戳大致相同。 (实际上,Set B增量为5秒,Set A增量为1分钟)

我想做的是:
1)用秒填充Set A和Set B(见下表)。
2)空数据正常,matplotter
应该忽略它 3)用新的日期时间绘制 目的:我想这样做是将多个数据源(datetime-temperature,datetime-datalogger等)与单个时间线组合在一起。

我的问题:
a)是否有预先构建的算法(matplotlib,datetime,其他一些模块)来完成1)?
b)如果a)是否定的,那么完成1)的最佳方法是什么? c)是否有更好(更容易)的方法来实现目的?

设置A:
日期时间 数据
6/21/2016 00:00:01 1
2016/6/21 00:00:02
2016/6/21 00:00:03
...
2016/6/21 00:59:58
2016/6/21 00:59:59
6/21/2016 01:00:00 2
6/21/2016 01:00:01
6/21/2016 01:00:02
...
6/21/2016 02:02:58
6/21/2016 02:02:59
6/21/2016 02:03:00 3

设置B:
日期时间 数据
6/21/2016 00:00:01
2016/6/21 00:00:02
...
2016/6/21 00:01:08
2016/6/21 00:01:09
2016/6/21 00:01:10 10
2016/6/21 00:01:11
2016/6/21 00:01:12
...
6/21/2016 02:00:58
6/21/2016 02:00:59
6/21/2016 02:01:00 50
...
6/21/2016 02:02:59
6/21/2016 02:03:00

1 个答案:

答案 0 :(得分:2)

跳过问题(c)的权利,如果是我,我不会用第二个分辨率填充两个数据集。相反,我会做一个简单的pd.merge和情节。

df_C = pd.merge(df_A, df_B, how='outer', left_index=True, right_index=True)
# forward fill data
df_C.ffill(inplace=True)

现在df_C

In [68]: df_c
Out[68]: 
                     dataA  dataB
2016-06-21 00:00:01    1.0    NaN
2016-06-21 00:01:10    1.0   10.0
2016-06-21 01:00:00    2.0   10.0
2016-06-21 01:02:00    2.0   20.0
2016-06-21 01:23:00    2.0   30.0
2016-06-21 01:30:00    2.0   40.0
2016-06-21 02:01:00    2.0   50.0
2016-06-21 02:03:00    3.0   50.0

然后只需致电df_C.plot()即可绘制数据。

如果您想要获得第二个分辨率,可以通过使用pd.date_range

重置索引来实现此目的
df_C.reindex(pd.date_range(df_C.index.min(), df_C.index.max(), freq='s'))