I am trying to plot information against dates. I have a list of dates in the format "01/02/1991".
I converted them by doing the following:
x = parser.parse(date).strftime('%Y%m%d'))
Then I tried to use num2date
import matplotlib.dates as dates new_x = dates.num2date(x)
plt.plot_date(new_x, other_data, fmt="bo", tz=None, xdate=True)
But I get an error. It says "ValueError: year is out of range". Any solutions?
As @KyssTao has been saying,
help(dates.num2date) says that the
x has to be a float giving the number of days since 0001-01-01 plus one. Hence,
19910102 is not 2/Jan/1991, because if you counted 19910101 days from 0001-01-01 you'd get something in the year 54513 or similar (divide by 365.25, number of days in a year).
datestr2num instead (see
new_x = dates.datestr2num(date) # where date is '01/02/1991'
You can do this more simply using
plot() instead of
First, convert your strings to instances of Python
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
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()