гистограмма matplotlib с несколькими столбцами, даты на оси x - PullRequest
0 голосов
/ 06 октября 2018

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

start_date = pd.to_datetime('20180101')
dates = pd.date_range(start_date, periods=365)
df = pd.DataFrame(np.random.randn(365,4), index = dates, columns = list('ABCD'))
df = df.resample('M').sum()

Если я использую

df.plot.bar()

, тогда даты на оси X испорчены.Если я использую

fig, ax = plt.subplots()
ax.bar(df.index, df['A'],width = 5, align = 'center')
ax.bar(df.index, df['B'], width = 5 , align = 'center')
ax.bar(df.index, df['C'],width = 5, align = 'center')
ax.bar(df.index, df['D'], width = 5 , align = 'center')
ax.xaxis_date()
ax.get_xaxis().set_major_locator(mdates.MonthLocator())
ax.get_xaxis().set_major_formatter(mdates.DateFormatter("%b %Y"))
fig.autofmt_xdate()
plt.show()

, тогда мои бары перекрывают друг друга, и даты отображаются со сдвигом на один месяц.

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

1 Ответ

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

Я сделал аналогичный проект с барами и использовал этот пример , чтобы получить правильное форматирование.

Поскольку у меня нет значений mdates, я не могу запустить его, чтобы проверить,это правильно в вашем случае, но попробуйте сделать это:

...
fig, ax = plt.subplots()
width = 5
ax.bar(df.index, df['A'], width, align = 'center')
ax.bar(df.index + width , df['B'], width, align = 'center')
ax.bar(df.index + 2*width, df['C'], width, align = 'center')
ax.bar(df.index + 3*width, df['D'], width, align = 'center')
ax.set_xticks(df.index + width) # sets the x-ticks to the middle of the cluster of bars
ax.xaxis_date()
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...