Сюжетная серия, сгруппированная в несколько уровней - PullRequest
0 голосов
/ 23 октября 2018

У меня есть набор данных со следующей структурой:

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: Нет оси с именем месяца для типа объекта

  • Как работает матплотлиби панды работают для этого требования?
  • Как я могу получить нужные участки?

Заранее спасибо.

1 Ответ

0 голосов
/ 24 октября 2018

Если я правильно понимаю, вы пытаетесь создать многоплановые сетки, которые поддерживаются модулем Python Seaborn .Учитывая DataFrame df с временными метками типа datetime64[ns] и некоторыми значениями в столбце values, которые вы хотите визуализировать, вы можете разделить информацию о временных метках, поместить их в новые столбцы с именами year, month и * 1008.* и затем используйте функцию FacetGrid для создания сетки графиков.Например, следующий код на Python создаст линейный график для каждого месяца и поместит их в последовательность строк.

g = seaborn.FacetGrid(df,"month")
g.map(plt.plot,"day","values")

Seaborn построен поверх matplotlib.

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