Как отметить начало нового года при построении серии pandas?

Я рисую такие данные:

import numpy as np import matplotlib.pyplot as plt import matplotlib.dates as mdates import pandas as pd a = pd.DatetimeIndex(start='2010-01-01',end='2011-06-01' , freq='M') b = pd.Series(np.random.randn(len(a)), index=a) 

Я хотел бы, чтобы сюжет был в формате баров, поэтому я использую это:

 b.plot(kind='bar') 

Это то, что я получаю:

введите описание изображения здесь

Как видите, даты отформатированы полностью, что очень уродливо и нечитаемо. Мне довелось проверить эту команду, которая создает очень хороший формат даты:

 b.plot() 

Как вы видете: введите описание изображения здесь

Мне очень нравится этот формат, он включает в себя месяцы, отмечает начало года и легко читается.

После того, как вы выполнили поиск, ближайший доступ к этому формату можно использовать следующим образом:

 fig, ax = plt.subplots() ax.plot(b.index, b) ax.xaxis.set_major_formatter(mdates.DateFormatter('%b')) 

Однако вывод выглядит следующим образом: введите описание изображения здесь

Я могу иметь месячные имена по оси x таким образом, но мне больше нравится первое форматирование. Это намного более элегантно. Кто-нибудь знает, как я могу получить те же самые точные знаки для моего бара?

Вот решение, которое даст вам формат, который вы ищете. Вы можете напрямую редактировать метки меток и использовать set_major_formatter() :

 fig, ax = plt.subplots() ax.bar(b.index, b) ticklabels = [item.strftime('%b') for item in b.index] #['']*len(b.index) ticklabels[::12] = [item.strftime('%b\n%Y') for item in b.index[::12]] ax.xaxis.set_major_formatter(matplotlib.ticker.FixedFormatter(ticklabels)) ax.set_xticks(b.index) plt.gcf().autofmt_xdate() 

Вывод: введите описание изображения здесь