Python Pandas:将多个时间序列数据帧绘制到单个绘图中
我有以下数据帧:Python Pandas:将多个时间序列数据帧绘制到单个绘图中,python,pandas,matplotlib,pandas-groupby,Python,Pandas,Matplotlib,Pandas Groupby,我有以下数据帧: 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
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
这是一个包含多个时间序列数据的数据帧,从min=1
到max=35
。每个组都有这样的时间序列
我想根据1到35的x轴绘制每个时间序列A到Z。y轴每次都是块
我在考虑使用类似于一个动画的东西,它可以将每个系列相互对应。每个“色调”将被设置为不同的组。(欢迎提出其他想法。)
我的问题是:如何格式化此数据帧以绘制多个系列?列是否应为GroupA
,GroupB
等
如何使数据帧的格式为:
time GroupA blocksA GroupsB blocksB GroupsC blocksC....
如图所示,这是Andrews绘图的正确格式吗
编辑
如果我尝试:
df.groupby('Group').plot(legend=False)
x轴完全不正确。所有时间序列应在0到35之间绘制,全部在一个序列中
我如何解决这个问题 看看这些变体。第一个是安德鲁斯曲线,第二个是多线图,按一列月分组。数据框数据
包括三列温度
,日期
,和月份
:
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()
绘制安德鲁斯曲线时,数据被保存到一个函数中。这意味着Andrews的曲线由紧密相连的函数表示,表明相应的数据点也将紧密相连
您可以将数据重新构造为透视表:
df.pivot_table(index='time',columns='Group',values='blocks',aggfunc='sum').plot()
要在数据帧上调用andrews_曲线,必须标记要分组的值。试试安德鲁斯曲线(df,'Group')
按列分组Group
@Serenity这真是一团糟。x轴不是从1到35,我也不确定y轴是什么。你如何改变这个?安德鲁斯的曲线在[-pi;+pi]之间。请阅读:@Serenity是否可以更改x轴范围?ax=plt.gca();ax_set_xlim(1,35)
见上面的编辑;我的“groupby”绘图有问题。我将此代码用于我的数据,并出现以下错误。有人能帮我吗?TypeError:输入类型不支持ufunc“true_divide”,并且无法根据强制转换规则“safe”将输入安全强制为任何受支持的类型