pythonmatplotlibpandas

Formatting datetime xlabels in matplotlib (pandas df.plot() method)


I can't figure out how to change the format of these x-labels. Ideally, I'd like to call strftime('%Y-%m-%d') on them. I've tried things like set_major_formatter but was unsuccessful.

import pandas as pd
import numpy as np
date_range = pd.date_range('2014-01-01', '2015-01-01', freq='MS')
df = pd.DataFrame({'foo': np.random.randint(0, 10, len(date_range))}, index=date_range)
ax = df.plot(kind='bar')

ugly x label formats


Solution

  • The objects in the date_range DF are Timestamp objects. Call Timestamp.strftime on each object:

    date_range = pd.date_range('2014-01-01', '2015-01-01', freq='MS')
    date_range = date_range.map(lambda t: t.strftime('%Y-%m-%d'))
    print date_range
    array([2014-01-01, 2014-02-01, 2014-03-01, 2014-04-01, 2014-05-01,
           2014-06-01, 2014-07-01, 2014-08-01, 2014-09-01, 2014-10-01,
           2014-11-01, 2014-12-01, 2015-01-01], dtype=object)
    

    This allows for more general formatting options versus truncating the ticklabel string.