J'essaie de tracer des informations contre des dates. J'ai une liste de dates dans le format "01/02/1991".
Je les ai convertis en procédant comme suit:
x = parser.parse(date).strftime('%Y%m%d'))
qui donne 19910102
Puis j'ai essayé d'utiliser num2date
import matplotlib.dates as dates
new_x = dates.num2date(x)
Traçage:
plt.plot_date(new_x, other_data, fmt="bo", tz=None, xdate=True)
Mais je reçois une erreur. Il indique "ValueError: l'année est en dehors des limites". Des solutions?
Comme @KyssTao l'a dit, help(dates.num2date)
indique que x
doit être un nombre à virgule indiquant le nombre de jours depuis le 01.01.2001 plus un. Par conséquent, 19910102
N’est pas le 2/Jan/1991, car si vous comptiez 19910101 jours à partir du 01.01.2001, vous obtiendrez quelque chose dans l’année 54513 ou similaire (division par 365,25, nombre de jours dans une année). ).
Utilisez datestr2num
À la place (voir help(dates.datestr2num)
):
new_x = dates.datestr2num(date) # where date is '01/02/1991'
Vous pouvez le faire plus simplement en utilisant plot()
au lieu de plot_date()
.
Commencez par convertir vos chaînes en instances 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
Puis intrigue:
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()
Résultat: