绘制具有不同日期的两个时间序列的值

2024-04-25 14:58:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个时间序列。每个时间序列(s1和s2)都由一个值列表和一个相应的时间列表(例如时间戳或其他什么)表示。我使用的是python,例如:

s1_values = [6,8,6,3,7,9] # len(s1_values) == len(s1_times)
s1_times =  [1,3,6,7,8,12]

s2_values = [3,8,7,2,5,4,6,2] # len(s2_values) == len(s2_times)
s2_times =  [2,4,5,7,8,9,10,13]

我想看看两个时间序列s1和s2之间的关系,所以我希望能够使用Matplotlib绘制s1_值(在x轴上)和s2_值(在y轴上),但是由于这两个时间序列在时间上没有对齐,我不知道如何做到这一点。在

也许有一些常见的方法来处理时间序列,但我不知道它们。在


Tags: 方法列表len关系matplotlib时间绘制序列
1条回答
网友
1楼 · 发布于 2024-04-25 14:58:01

您可以使用pandasdocs),这对时间序列数据非常有用。在本例中,您将生成两个数据帧,然后对它们进行合并和排序。在

merge为您提供了一个合并的“时间”序列(以不同方式合并here),将nan值插入值列中,其中没有该时间的值。然后按共享的Time列进行排序。df.fillna函数(docs)接受method参数,如果是ffill或{},则用最后一个有效值填充空白,如果bfill则用下一个有效值填充。或者,您可以使用df.interpolate来进行缺失值的线性插值(docs)。在

方便的方法是pandas包装matplotlib,这样你就可以直接从数据帧绘图了。在

import matplotlib.pyplot as plt
import pandas as pd


s1_values = [6,8,6,3,7,9] 
s1_times =  [1,3,6,7,8,12]

s2_values = [3,8,7,2,5,4,6,2]
s2_times =  [2,4,5,7,8,9,10,13]

df1 = pd.DataFrame(zip(s1_times, s1_values), columns=['Time', 's1 values'])
df2 = pd.DataFrame(zip(s2_times, s2_values), columns=['Time', 's2 values'])

df = df1.merge(df2, how='outer', on='Time', sort='Time')
df.fillna(method='pad', inplace=True)  # or df.interpolate(inplace=True)

df.plot(kind='scatter', x='s1 values', y='s2 values')
plt.show()

使用fillna(method='ffill')

enter image description here

使用interpolate()

enter image description here

相关问题 更多 >

    热门问题