在python pandas中绘制多年时间序列的负载持续时间曲线

问题描述

我有以下时间序列:

                date_time  system_load
0     2013-01-01 00:00:00     599.2
1     2013-01-01 01:00:00     759.2
2     2013-01-01 02:00:00     954.5
3     2013-01-01 03:00:00     190.9
4     2013-01-01 04:00:00     465.2
...                   ...      ...
70123 2020-12-31 19:00:00     355.9
70124 2020-12-31 20:00:00     752.1
70125 2020-12-31 21:00:00     928.5
70126 2020-12-31 22:00:00     299.2
70127 2020-12-31 23:00:00     478.5

[70128 rows x 2 columns]

我想在同一个图表上绘制每年的“每小时负荷持续时间曲线”。

想要的结果:

Desired result

我想要所有年份的负载持续时间曲线 [2013-2020]

我试过了,但我认为它很长如下,它给了我一个情节:

df=data.copy()
df['date_time'] = pd.to_datetime(df['date_time'])
df13=df[df.date_time.dt.year.eq(2013)]
df14=df[df.date_time.dt.year.eq(2014)]
df15=df[df.date_time.dt.year.eq(2015)]
df16=df[df.date_time.dt.year.eq(2016)]
df17=df[df.date_time.dt.year.eq(2017)]
df18=df[df.date_time.dt.year.eq(2018)]
df19=df[df.date_time.dt.year.eq(2019)]
df20=df[df.date_time.dt.year.eq(2020)]
print (df20.head())
df13_sorted = df13.sort_values(by=['system_load'],ascending=False)
df14_sorted = df14.sort_values(by=['system_load'],ascending=False)
df15_sorted = df15.sort_values(by=['system_load'],ascending=False)
df16_sorted = df16.sort_values(by=['system_load'],ascending=False)
df17_sorted = df17.sort_values(by=['system_load'],ascending=False)
df18_sorted = df18.sort_values(by=['system_load'],ascending=False)
df19_sorted = df19.sort_values(by=['system_load'],ascending=False)
df20_sorted = df20.sort_values(by=['system_load'],ascending=False)
sort = np.sort(df13['system_load'])[::-1]
duration = np.arange(1.,len(sort)+1) / len(sort)

sort = np.sort(df16['system_load'])[::-1]
duration_leap = np.arange(1.,len(sort)+1) / len(sort)

fig1 = plt.figure( figsize=(6,7))
ax1 = fig1.add_subplot(111)
ax1.plot(duration,df13_sorted['system_load']/1000,label='Y2013',)
ax1.plot(duration,df14_sorted['system_load'],label='Y2014')
ax1.plot(duration,df15_sorted['system_load'],label='Y2015')
ax1.plot(duration_leap,df16_sorted['system_load'],label='Y2016')
ax1.plot(duration,df17_sorted['system_load'],label='Y2017')
ax1.plot(duration,df18_sorted['system_load'],label='Y2018')
ax1.plot(duration,df19_sorted['system_load'],label='Y2019')
ax1.plot(duration_leap,df20_sorted['system_load'],label='Y2020')
ax1.plot(title='Peak Load')

plt.xlabel('duration % of Total Hours',size = 12)
plt.ylabel('Peak Load ',size = 12)
plt.grid(b = True,which = 'major',color ='k',linestyle = '-')
plt.minorticks_on()
plt.grid(b = True,which = 'minor',axis = 'y',color ='r',linestyle = ':')
plt.legend(loc='best',ncol=3,)
plt.show()

基于“tdy's”评论当前结果:

enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)