繁体   English   中英

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

[英]Plot values of two time series with different dates

我有两个时间序列。 每个时间序列(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_values(在x轴上)相对于s2_values(在y轴上)绘制,但是由于两个时间序列是时间不对,我不知道该怎么做。

也许对于时间序列有一些通用的方法,但是我不知道它们。

您可以使用pandasdocs ),它非常适合时间序列数据。 在这种情况下,您将制作两个数据框,然后对其进行合并和排序。

merge为您提供了合并的“时间”系列( 此处有多种合并方式),可将nan值插入到该时间没有值的value列中。 然后,按共享的“ Time列对此进行排序。 df.fillna函数( docs )接受method参数,如果该参数是ffillpad用最后一个有效值填充空白,如果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')

在此处输入图片说明

使用interpolate()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM