Изменение форматирования оси дата-время в matplotlib (гистограмма) - PullRequest
0 голосов
/ 30 марта 2020

Я создал следующую гистограмму:

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

ts = pd.Series(np.random.randn(1000),index=pd.date_range('1/2/2000', periods=1000))
df = pd.DataFrame(np.random.randn(1000,4), index = ts.index, columns = list('ABCD'))
df = df.cumsum()
df.iloc[0:5].plot.bar()

Результат выглядит так: enter image description here

Как изменить формат оси x на 1) YMD без часов и минут и 2) повернуть метку оси x на 50 градусов?

Я посмотрел на это и сумел создать линейный график: Изменение форматирования оси дата-время в matplotlib

import matplotlib.dates as mdates

fig, ax = plt.subplots()
ax.plot(df.index[0:5], df.values[0:5])
ax.set_xticks(df.index[0:5])
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))
ax.xaxis.set_minor_formatter(mdates.DateFormatter("%Y-%m-%d"))
_=plt.xticks(rotation=50)

enter image description here

Чтобы получить гистограмму с нужной меткой xaxis, я попытался выполнить следующее, но получил «ValueError: несоответствие формы: объекты не могут быть переданы в одну форму ":

fig, ax = plt.subplots()
ax.bar(df.index[0:5], df.values[0:5])
ax.set_xticks(df.index[0:5])
ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))
ax.xaxis.set_minor_formatter(mdates.DateFormatter("%Y-%m-%d"))
_=plt.xticks(rotation=50) 

Может кто-нибудь сказать мне, как я могу добраться до гистограммы?

Есть ли способ использовать только pyplot без осей?

Спасибо.

1 Ответ

1 голос
/ 30 марта 2020

Вы можете преобразовать свой временной индекс в соответствующий формат с помощью strftime и затем построить график, передав rot=1 для вращения метки:

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

ts = pd.Series(np.random.randn(1000),index=pd.date_range('1/2/2000', periods=1000))
df = pd.DataFrame(np.random.randn(1000,4), index = ts.index, columns = list('ABCD'))
df = df.cumsum()

df.index = df.index.strftime('%Y-%m-%d')
df.iloc[0:5].plot.bar(rot=1)

enter image description here

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