gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 03:52:35 25 4
gpt4 key购买 nike

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

A组:
日期时间                 数据
2016年6月21日00:00:01     1
2016年6月21日01:00:00     2
2016年6月21日02:03:00     3

B组:
日期时间                 数据
2016年6月21日00:01:10    10
2016年6月21日01:02:00    20
2016年6月21日01:23:00    30
2016年6月21日01:30:00    40
2016年6月21日02:01:00    50

我能够在两个独立的图上绘制两组,并具有大致相同的开始和结束时间戳。 (实际上,B组增量为5秒,A组增量为1分钟)

我想做的是:
1) 将 A 组和 B 组都填入秒数(见下表)。
2)空数据是可以的,它应该被matplotter忽略
3)用新的日期时间绘图
目的:我想做的是将多个数据源(日期时间温度、日期时间数据记录器等)与单个时间线结合起来。

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

A组:
日期时间                 数据
2016年6月21日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      
2016年6月21日01:00:00     2
2016年6月21日01:00:01      
2016年6月21日01:00:02      
...
2016年6月21日02:02:58      
2016年6月21日02:02:59      
2016年6月21日02:03:00     3

B组:
日期时间                 数据
2016年6月21日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      
...
2016年6月21日02:00:58      
2016年6月21日02:00:59      
2016/6/21 02:01:00    50
...
2016年6月21日02:02:59      
2016年6月21日02:03:00      

最佳答案

直接跳到问题(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'))

关于python - 如何在 Python Matplotlib 中绘制具有不同时间间隔的两个数据集并让它们共享轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38004491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com