Reputation: 1511
I'm plotting a figure where the default format shows up as:
I would like to modify it so that the month ticks show up every 1 month but keep the year. My current attempt is this:
years = mdates.YearLocator()
months = mdates.MonthLocator()
monthsFmt = mdates.DateFormatter('%b-%y')
dts = s.index.to_pydatetime()
fig = plt.figure(); ax = fig.add_subplot(111)
ax.plot(dts, s)
ax.xaxis.set_major_locator(months)
ax.xaxis.set_major_formatter(monthsFmt)
but it's not producing the right result:
How exactly do I need to modify it so that it shows up like the first but with the months ticks appear every month?
Upvotes: 9
Views: 6553
Reputation: 1511
Figured out one solution, which is to stick months into the minor ticks and keep years as the major.
E.g.
years = mdates.YearLocator()
months = mdates.MonthLocator()
monthsFmt = mdates.DateFormatter('%b')
yearsFmt = mdates.DateFormatter('\n\n%Y') # add some space for the year label
dts = s.index.to_pydatetime()
fig = plt.figure(); ax = fig.add_subplot(111)
ax.plot(dts, s)
ax.xaxis.set_minor_locator(months)
ax.xaxis.set_minor_formatter(monthsFmt)
plt.setp(ax.xaxis.get_minorticklabels(), rotation=90)
ax.xaxis.set_major_locator(years)
ax.xaxis.set_major_formatter(yearsFmt)
Upvotes: 12