Группировка данных по годам для построения меньших диаграмм - PullRequest
0 голосов
/ 24 января 2019

У меня есть некоторые дневные значения, которые распространяются на 10 лет.

Дата, Темп

"1981-01-01", 20.7
"1981-01-02", 17.9
...
"1990-12-31", 13.0

Я читаю эти значения из csv в кадр данных, подобный этому

df = pd.read_csv(r'.\data\daily-minimum-temperatures.csv')
df['Date'] = pd.to_datetime(df['Date'])

Я бы хотелсгруппировать все эти значения по годам, чтобы построить 10 линейных диаграмм (по одной в год), чтобы сравнить их.

Я пытался использовать Grouper следующим образом

grouper = df.groupby(['Date', pd.Grouper(key='Date', freq='Y')])

Я получаю объект Grouper(DataFrameGroupBy) длиной 10. Я понимаю, что этот объект представляет мои данные, сгруппированные за десять лет.

Но при попытке построить этот объект появляется ошибка.

grouper.plot()
RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (`matplotlib.pyplot.figure`) are retained until explicitly closed and may consume too much memory. (To control this warning, see the rcParam `figure.max_open_warning`).

Как я могу это сделать?

1 Ответ

0 голосов
/ 24 января 2019

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

В кодах

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

toy = pd.DataFrame()

toy['Time'] = pd.date_range(start=pd.Timestamp('1981-01-01'), end=pd.Timestamp('1990-12-31'), freq='1D')
toy['Values'] = np.random.random_sample((len(toy)))

years = sorted(np.unique(toy['Time'].dt.year))

fig = plt.figure(figsize=(18, 18))

for i in range(len(years)):

    sliced = toy.loc[toy.Time.dt.year == years[i]]

    x = sliced['Time']
    y = sliced['Values']

    plt.subplot(len(years), 1, i+1)
    plt.plot(x, y, '-')
    plt.xlabel('Time')
    plt.ylabel('Value')


plt.show()

Output plot

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