построение временных рядов, сгруппированных по часам и дням недели - PullRequest
2 голосов
/ 17 февраля 2020

У меня есть почасовые данные временных рядов за год, и sh, чтобы построить среднечасовые измерения для каждого дня недели. Я запустил следующий код, и мои данные в следующем формате (я ранее создал столбцы для дней недели).

df = df.groupby([df['date_UTC'].dt.hour, df['w_day']]).pm2_5_ugm3.mean().reset_index().dropna()

date_UTC    w_day   pm2_5_ugm3
0   0   Friday  11.868802
1   0   Monday  12.741524
2   0   Saturday    13.346273
3   0   Sunday  13.093804
4   0   Thursday    14.525096
... ... ... ...
163 23  Saturday    12.836788
164 23  Sunday  12.712683
165 23  Thursday    12.046935
166 23  Tuesday 12.043133
167 23  Wednesday   14.164027

В конечном итоге мне нужен график, похожий на приведенный ниже, но я не уверен как это сделать, используя seaborn / matplotlib.

enter image description here

ОБНОВЛЕНИЕ:

Я использовал предложение @Arnold Vialfont, которое в основном дает мне результаты, которые я ищу, но facetplot кажется, не позволяет мне строить легенду, когда я представляю оттенок. Затем я использовал factorplot, но не похоже, что этот график может создать линейный график, что мне и нужно. Есть ли способ использовать факторплот и дать легенду оттенок?

col_order=["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]

sns.set_style("white")
ax = sns.FacetGrid(df, col="w_day", col_wrap=7, height=6, col_order=col_order, hue ='Zone')
ax.map(sns.lineplot, "date_UTC", "pm2_5_ugm3")

Оттенок не создает легенду

enter image description here

Здесь, используя factorplot, у меня есть легенда, но я не могу создать линейный сюжет по желанию.

ax = sns.catplot(x="date_UTC", y="pm2_5_ugm3", col="w_day", hue = 'Zone',
                data=df, ci=None, aspect=.6)

enter image description here

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Вы можете использовать seaborn следующим образом, где col_wrap позволяет выбрать количество графики в строке:

g = sns.FacetGrid(df, col="w_day", col_wrap=7, height=4)
h.map(sns.lineplot, "date_UTC", "pm2_5_ugm3")

Обратите внимание, что по сравнению с тем, что вы в конечном итоге хотите, будет быть одной кривой.

0 голосов
/ 18 февраля 2020

После еще нескольких исследований кажется, что лучший способ добиться того, чего я хочу, - это использовать relblot Seaborn, так как в нем сочетаются и lineplot, и facetgrid.

...