Trazando fechas en el eje x con matplotlib de Python

Estoy tratando de trazar información contra las fechas. Tengo una lista de fechas en el formato “01/02/1991”.

Los convertí haciendo lo siguiente:

x = parser.parse(date).strftime('%Y%m%d')) 

lo que da 19910102

Entonces intenté usar num2date

 import matplotlib.dates as dates new_x = dates.num2date(x) 

Trazar

 plt.plot_date(new_x, other_data, fmt="bo", tz=None, xdate=True) 

Pero me sale un error. Dice “ValueError: el año está fuera de rango”. ¿Alguna solución?

Como @KyssTao ha estado diciendo, la help(dates.num2date) dice que la x tiene que ser un flotador que da el número de días desde 0001-01-01 más uno. Por lo tanto, 19910102 no es 2 / enero / 1991, porque si contara 19910101 días desde 0001-01-01, obtendría algo en el año 54513 o similar (divida entre 365.25, número de días en un año).

Utilice datestr2num en datestr2num lugar (consulte la help(dates.datestr2num) ):

 new_x = dates.datestr2num(date) # where date is '01/02/1991' 

Puede hacer esto más simplemente usando plot() lugar de plot_date() .

Primero, convierta sus cadenas a instancias de Python datetime.date :

 import datetime as dt dates = ['01/02/1991','01/03/1991','01/04/1991'] x = [dt.datetime.strptime(d,'%m/%d/%Y').date() for d in dates] y = range(len(x)) # many thanks to Kyss Tao for setting me straight here 

Entonces ttwig:

 import matplotlib.pyplot as plt import matplotlib.dates as mdates plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d/%Y')) plt.gca().xaxis.set_major_locator(mdates.DayLocator()) plt.plot(x,y) plt.gcf().autofmt_xdate() 

Resultado:

introduzca la descripción de la imagen aquí