Pandas:将多个时间序列数据帧绘制成单个p

2024-06-16 10:11:15 发布

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

我有以下熊猫数据框:

     time      Group      blocks
0     1        A           4
1     2        A           7
2     3        A           12
3     4        A           17
4     5        A           21 
5     6        A           26
6     7        A           33
7     8        A           39
8     9        A           48
9     10       A           59
    ....        ....          ....
36     35      A           231
37     1       B           1
38     2       B           1.5
39     3       B           3
40     4       B           5
41     5       B           6
    ....        ....          ....
911    35      Z           349

这是一个包含多个时间序列ques数据的数据帧,从min=1max=35。每个Group都有这样的时间序列。

我想绘制每个时间序列A到Z相对于1到35的x轴。y轴每次都是blocks

我正在考虑使用类似于Andrews Curves plot的东西,它可以将每个序列相互对应。每个“色调”将设置为不同的组。(欢迎其他想法。)

enter image description here

我的问题是:如何格式化这个数据帧来绘制多个序列?列应该是GroupAGroupB等吗。?

如何使数据帧的格式为:

time GroupA blocksA GroupsB blocksB GroupsC blocksC....

如图所示,这是安德鲁斯绘图的正确格式吗?

编辑

如果我尝试:

df.groupby('Group').plot(legend=False)

x轴完全不正确。所有时间序列应绘制在0到35之间,全部为一个序列。

enter image description here

我该怎么解决?


Tags: 数据timeplot格式时间group绘制序列
2条回答

可以将数据重新构造为透视表:

df.pivot_table(index='time',columns='Group',values='blocks',aggfunc='sum').plot()

看看这个变种。第一个是安德鲁斯曲线,第二个是由一列Month组成的多行图。数据帧data包括三列TemperatureDayMonth

import pandas as pd
import statsmodels.api as sm
import matplotlib.pylab as plt
from pandas.tools.plotting import andrews_curves

data = sm.datasets.get_rdataset('airquality').data
fig, (ax1, ax2) = plt.subplots(nrows = 2, ncols = 1)
data = data[data.columns.tolist()[3:]] # use only Temp, Month, Day

# Andrews' curves
andrews_curves(data, 'Month', ax=ax1)

# multiline plot with group by
for key, grp in data.groupby(['Month']): 
    ax2.plot(grp['Day'], grp['Temp'], label = "Temp in {0:02d}".format(key))
plt.legend(loc='best')    
plt.show()

当你绘制安德鲁斯曲线时,你的数据被保存到一个函数中。这意味着安德鲁斯的曲线由函数紧密地表示,这意味着相应的数据点也将紧密地放在一起。

enter image description here

相关问题 更多 >