gpt4 book ai didi

Python线在同一个图上绘制多个时间序列

转载 作者:行者123 更新时间:2023-11-28 21:37:42 26 4
gpt4 key购买 nike

我正在解析一个文件,该文件包含多个时间序列的时间戳数据,我想在 python 中进行解析,然后使用 matplotlib 为每组时间序列数据创建一个包含独立线条的单线图。我正在解析的数据看起来像这样:

time label   value
1.05 seriesA 3.925
1.09 seriesC 0.245
2.13 seriesB 12.32
2.73 seriesC 4.921

我已将该文件解析为一个列表字典,其中包含以系列标签为键的 (time,value) 元组。我正在努力研究如何将所有这些数据从这个变成单​​线图。我想要在单个图上为 seriesA、seriesB、seriesC 等设置独立的线条。有什么指点吗?

编辑:根据要求字典如下。我很难找出存储这些数据的最佳方式,所以也许我使用的数据结构也是一个问题。下面的键是不同的时间序列标签,值是(时间,值)元组列表。无论如何,这里是:

{'client1': [(861.991698574, 298189000.0), (862.000768158, 0.0)], 
'client2': [(861.781502324, 0.0), (861.78903722, 153600000.0),
(862.281483262, 0.0), (862.289038158, 153600000.0)], 'client3':
[(862.004470762, 3295674368.0), (862.004563939, 3295674368.0),
(862.03981821, 799014912.0), (862.040403314, 1599078400.0),
(862.540269616, 3295674368.0), (862.55133097, 1599078400.0)]}

最佳答案

我喜欢 pandas 解决这类问题。

首先,将数据放入 pandas dataframe 中:

import pandas as pd

data = {'client1': [(861.991698574, 298189000.0), (862.000768158, 0.0)],
'client2': [(861.781502324, 0.0), (861.78903722, 153600000.0),
(862.281483262, 0.0), (862.289038158, 153600000.0)], 'client3':
[(862.004470762, 3295674368.0), (862.004563939, 3295674368.0),
(862.03981821, 799014912.0), (862.040403314, 1599078400.0),
(862.540269616, 3295674368.0), (862.55133097, 1599078400.0)]}

time = []
label = []
value = []

for k, v in data.items():
for tup in v:
label.append(k)
time.append(tup[0])
value.append(tup[1])

df = pd.DataFrame({'time':time, 'label':label, 'value':value})

产生这个数据框:

>>> df
label time value
0 client1 861.991699 2.981890e+08
1 client1 862.000768 0.000000e+00
2 client2 861.781502 0.000000e+00
3 client2 861.789037 1.536000e+08
4 client2 862.281483 0.000000e+00
5 client2 862.289038 1.536000e+08
6 client3 862.004471 3.295674e+09
7 client3 862.004564 3.295674e+09
8 client3 862.039818 7.990149e+08
9 client3 862.040403 1.599078e+09
10 client3 862.540270 3.295674e+09
11 client3 862.551331 1.599078e+09

然后,你可以这样做:

by_label = df.groupby('label')

for name, group in by_label:
plt.plot(group['time'], group['value'], label=name)

plt.legend()
plt.show

关于应该如何将数据存储在字典中;有不同的方法来解决这个问题,但如果我是你,并且能够通过 pandas 轻松使用你的数据,我会使用以下形式的字典:

data = {'label':['client1', 'client1', 'client2', ...], 
'time':[time1, time2, time3, ...],
'value':[value1, value2, value3, ...]}

确保所有列表都以正确的方式排序(所有 3 个键的索引 0 是数据框的第 0 行,索引 1 是第 1 行,等等)。然后导入到 pandas 中,您需要做的就是 df = pd.DataFrame(data)

关于Python线在同一个图上绘制多个时间序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49100090/

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