Поскольку вы используете серию Pandas, рассмотрите решение для Pandas, которое все еще взаимодействует с matplotlib. Сначала вам нужно будет преобразовать серию данных во фрейм данных и назначить необходимые столбцы индикатора hour и day . При таком подходе вы можете передать объект ax
в качестве аргумента и использовать его для дополнительных нужд или использовать значения по умолчанию с DataFrame.plot
:
# CONVERT TO DATA FRAME WITH day AND hour COLUMNS
ts_df = (ts.to_frame()
.rename({0:'value'}, axis='columns')
.assign(hour = lambda x: x.index.hour,
dayofyear = lambda x: x.index.dayofyear)
)
ts_df.head()
# value hour dayofyear
# 2014-02-01 00:00:00 -0.555308 0 32
# 2014-02-01 01:00:00 0.720157 1 32
# 2014-02-01 02:00:00 -1.140971 2 32
# 2014-02-01 03:00:00 -0.359197 3 32
# 2014-02-01 04:00:00 -2.241330 4 32
seaborn.set()
for i, g in ts_df.groupby(['dayofyear']):
myfig, myaxes = plt.subplots(figsize = (8,4))
g['value'].plot(kind = 'box', ax = myaxes,
title = 'Hourly Value Boxplot in Day {}'.format(i))
# myaxes.legend(...)
plt.show()
В качестве альтернативы, если вам нужны все коробочные графики на одном участке, pivot
данные для столбцов дня:
ts_pvt_df = ts_df.pivot(index='hour', columns = 'dayofyear', values = 'value')
seaborn.set()
myfig, myaxes = plt.subplots(figsize = (12,6))
ts_pvt_df.plot(kind = 'box', ax = myaxes, title = 'Hourly Value Boxplots by Day')
plt.show()