我正在解析一个文件,该文件具有多个时间序列的时间序列时间戳数据,我想在 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
Run Code Online (Sandbox Code Playgroud)
我已将该文件解析为包含在系列标签上键入的 (time,value) 元组的列表字典。我正在努力解决如何从所有这些数据获得单线图。我希望在单个绘图上为系列 A、系列 B、系列 C 等提供独立的线条。任何指针?
编辑:根据要求,字典如下。我很难找出存储这些数据的最佳方式,所以也许我使用的数据结构也是一个问题。下面的键是不同的时间序列标签,值是 (time,value) 元组的列表。无论如何,这里是:
{'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)]}
Run Code Online (Sandbox Code Playgroud)
我喜欢用熊猫解决这类问题。
首先,将数据放入数据pandas框中:
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})
Run Code Online (Sandbox Code Playgroud)
导致此数据帧:
>>> 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
Run Code Online (Sandbox Code Playgroud)
然后,你可以这样做:
by_label = df.groupby('label')
for name, group in by_label:
plt.plot(group['time'], group['value'], label=name)
plt.legend()
plt.show
Run Code Online (Sandbox Code Playgroud)
关于如何将数据存储在字典中;有不同的方法来解决这个问题,但如果我是你,并且能够轻松地使用你的数据pandas,我会使用以下形式的字典:
data = {'label':['client1', 'client1', 'client2', ...],
'time':[time1, time2, time3, ...],
'value':[value1, value2, value3, ...]}
Run Code Online (Sandbox Code Playgroud)
确保所有列表都以正确的方式排序(所有 3 个键的索引 0 是数据帧的第 0 行,索引 1 是第 1 行,等等)。然后导入熊猫,你需要做的就是df = pd.DataFrame(data)
| 归档时间: |
|
| 查看次数: |
8952 次 |
| 最近记录: |