Временная шкала в пандах
Как я могу создать коробку для временного ряда pandas, где у меня есть ящик для каждого дня?
Примерный набор данных почасовых данных, где один ящик должен состоять из 24 значений:
import pandas as pd n = 480 ts = pd.Series(randn(n), index=pd.date_range(start="2014-02-01", periods=n, freq="H")) ts.plot()
Я знаю, что я мог бы добавить дополнительную колонку в течение дня, но я хотел бы иметь правильную функциональность x-axis и x-limit (например, в ts.plot()
), поэтому возможность работать с индексом datetime будет будь велика.
Аналогичный вопрос для R / ggplot2 здесь , если он помогает уточнить, что я хочу.
- Графический ящик
- Не задайте заголовок для pandas boxplot (groupby)
- Наложение числового значения медианы / дисперсии в ящиках
- Как применить пользовательский порядок столбцов к pandas boxplot?
- Боковые боксовые боксы с Pandas
Если это вариант для вас, я бы рекомендовал использовать Seaborn , который является оберткой для Matplotlib. Вы могли бы сделать это сами, перейдя по группам из ваших временных рядов, но это намного больше.
import pandas as pd import seaborn import matplotlib.pyplot as plt n = 480 ts = pd.Series(np.random.randn(n), index=pd.date_range(start="2014-02-01", periods=n, freq="H")) fig, ax = plt.subplots(figsize=(12,5)) seaborn.boxplot(ts, ts.index.dayofyear, ax=ax)
Который дает:
Обратите внимание, что я прохожу в течение day of year
качестве группы на морское побережье, если ваши данные охватывают несколько лет, это не сработает. Тогда вы могли бы подумать над чем-то вроде:
ts.index.to_series().apply(lambda x: x.strftime('%Y%m%d'))
Изменить, в течение 3-х часов вы можете использовать это как группу, но он работает только в том случае, если нет никаких минут или меньше. :
[(dt - datetime.timedelta(hours=int(dt.hour % 3))).strftime('%Y%m%d%H') for dt in ts.index]
(Не достаточно, чтобы прокомментировать принятое решение, поэтому вместо этого добавьте ответ).
В принятом коде есть две небольшие ошибки: (1) нужно добавить numpy
import и (2) nded для замены параметров x
и y
в инструкции boxplot
. Ниже показан график.
import numpy as np import pandas as pd import seaborn import matplotlib.pyplot as plt n = 480 ts = pd.Series(np.random.randn(n), index=pd.date_range(start="2014-02-01", periods=n, freq="H")) fig, ax = plt.subplots(figsize=(12,5)) seaborn.boxplot(ts.index.dayofyear, ts, ax=ax)
- python pandas date read_table
- Python, XML AttributeError: объект 'NodeList' не имеет атрибута 'firstChild'
- python – seaborn: доля ярлыка X не работает должным образом
- Как отсортировать ящик по медианным значениям в пандах
- Объединение plt.plot (x, y) с plt.boxplot ()
- Маркировка ящика с медианными значениями
- Ящик Matplotlib без выбросов
- Как установить диапазон оси y для морского ящика?
- Коробки в matplotlib: маркеры и выбросы
- Цвет Flier в коробке с matplotlib
- Лучший способ создания дневных ящиков с расписанием Pandas