Как вернуть несколько графиков временных рядов в python? - PullRequest
2 голосов
/ 28 мая 2020

У меня довольно большой фрейм данных, который выглядит примерно так (это фиктивные данные в качестве примера, так как в данных более 50 стран):

Date          Country    Counts
----------------------------------
2019-01-21    Italy      920182
2019-01-22    Italy      82912
2019-01-23    Italy      27213
2019-01-24    Italy      28293
2019-01-21    Belgium    373732
2019-01-22    Belgium    17363
2019-01-23    Belgium    282913
2019-01-24    Belgium    2122
2019-01-21    China      234211
2019-01-22    China      1234
2019-01-23    China      13456
2019-01-24    China      8291

Раньше я вручную создавал графики отдельно для каждой страны в этом фрейме данных, поэтому у меня может быть линия тренда, показывающая количество сверхурочных, а также красная линия, представляющая общее среднее значение по стране. Код, который я использовал для этого для каждой страны отдельно, был следующим:

Italy_df = df.loc[df['Country'] == 'Italy'] #search for all Italy data
Italy_df['Count'].mean() #total mean for Italy

x = Italy_df['Date']
y = Italy_df['Counts']

fig, ax = plt.subplots()

ax.plot(x, y)
plt.axhline(y=34927.23, color='r', linestyle='--') #y is the mean calculated for all Italy counts
plt.xticks(rotation=90)
plt.title("Weekly Sim Count average in Italy")
plt.xlabel('Week')
#plt.show()


a = '2020-01-13' #Key dates area
b = '2020-02-10'

plt.axvspan(a, b, color='gray', alpha=0.2, lw=0)
plt.plot(x, y, color='blue') #trend line over time
plt.show()

График, возвращаемый для Италии, выглядит примерно так: я бы хотел, чтобы этот же стиль графика возвращался для каждой страны в мой набор данных отдельно: enter image description here

На графиках ключевые даты, выделенные в сером поле, останутся одинаковыми для всех стран, однако 1) красная линия изменится в соответствии с означает страны и 2) Синяя линия также изменится, чтобы представить количество.

Вместо того, чтобы я повторял этот код для создания графика для каждой страны, есть ли способ создать al oop, который бы их графики отдельно для всех стран в фрейме данных? Это сэкономило бы мне столько времени :)

Большое спасибо

1 Ответ

3 голосов
/ 28 мая 2020

Приведенный ниже код должен отображать все временные ряды для каждого уникального значения в Country.

Изменить: l oop ниже теперь генерирует новое число для каждого уникального значения в Country.

a = datetime(2019, 1, 22) #Key dates area
b = datetime(2019, 1, 23)

for _, d in df.set_index('Date').groupby('Country'):
    fig, ax = plt.subplots()
    d['Counts'].plot()
    plt.axhline(y=d['Counts'].mean(), color='r', linestyle='--')
    plt.xticks(rotation=90)
    plt.title(f"Weekly Sim Count for {d['Country'].iat[0]}")
    plt.xlabel('Week')


    plt.axvspan(a, b, color='gray', alpha=0.2, lw=0)
    plt.legend()
    plt.show()

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...