Formato de xlabels datetime en matplotlib (método pandas df.plot ())

No puedo averiguar cómo cambiar el formato de estas tags x. Idealmente, me gustaría llamar a strftime('%Y-%m-%d') en ellos. He intentado cosas como set_major_formatter pero no set_major_formatter éxito.

 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') 

formatos de etiqueta x feo

Los objetos en el DF date_range son objetos de Timestamp . Llame a Timestamp.strftime en cada objeto:

 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) 

Esto permite opciones de formato más generales en lugar de truncar la cadena ticklabel.

Simplemente acceda a las tags de tick y cámbielas:

 xtl=[item.get_text()[:10] for item in ax.get_xticklabels()] _=ax.set_xticklabels(xtl) 

introduzca la descripción de la imagen aquí

Usted podría simplemente pasar nuevas tags exactamente con su tiempo de respuesta preferido:

 ax.set_xticklabels([pandas_datetime.strftime("%Y-%m-%d") for pandas_datetime in df.index]) 

No es la respuesta más bonita, pero hace el trabajo constantemente.