У меня есть набор данных со следующей структурой:
df = pd.read_csv('daily-minimum-values.csv', header=0, dtype={'Value':float})
df['Date'] = df['Date'].astype('datetime64[ns]')
df.head()
+------------+-------+
| Date | Value |
+------------+-------+
| 1990-01-01 | 20.7 |
+------------+-------+
| 1990-01-02 | 17.4 |
+------------+-------+
| 1990-01-03 | 18.1 |
+------------+-------+
| 1990-01-04 | 15.6 |
+------------+-------+
| 1990-01-05 | 12.4 |
+------------+-------+
Набор данных - это временная серия, содержащая данные с 1990 по 2013 год. Я хотел бы визуально проанализировать этот временной ряд догод, поэтому я попытался сгенерировать фигуру с несколькими вложенными участками для каждого года, проблема в том, что я также хотел бы показать квартал / месяц / дату или дату по оси x, например:
Пример графика
Мне нужно создать графики для нескольких уровней агрегации по оси X, поэтому я попробовал несколько вещей.
df.groupby(pd.Grouper(key='Date', freq='A')).plot(x="Date",y="Value") # Group by year and plot date in x-axes
, которая возвращает несколько графиков, носложно увидеть сразу несколько графиков для сравнительной цели:
Сгенерированные графики
Я пытался добавить два столбца в свой фрейм данных, ожидая год и месяцэто проще построить, но я не понимаю, как работает matplotlib.
df["year"]=df.Date.dt.year
df["month"]=df.Date.dt.month
df.groupby('year',"month")["Value"].sum().plot(x='month', y='Value')
, что приводит к следующей ошибке:
ValueError: Нет оси с именем месяца для типа объекта
- Как работает матплотлиби панды работают для этого требования?
- Как я могу получить нужные участки?
Заранее спасибо.