Reputation: 9501
Hi I am trying to convert a list of dates as strings to an x axis in matplotlib and I can't seem to get it to come out right.
dates = ['2014-05-06', '2014-05-07', '2014-05-08', '2014-05-09', '2014-05-10', '2014-05-11', '2014-05-12', '2014-05-13']
import matplotlib
from matplotlib import pyplot
from matplotlib import dates
converted_dates = matplotlib.dates.datestr2num(dates)
x_axis = (converted_dates)
y_axis = range(0,8)
pyplot.plot( x_axis, y_axis, '-' )
pyplot.show()
This brings back 1 2 3 4 5 6 7 on the x axis on the chart, what am I missing. I would like this to display 2014-05-06 etc
Upvotes: 3
Views: 18210
Reputation: 5913
The easiest is to use numpy directly:
import matplotlib
from matplotlib import pyplot
from matplotlib import dates
import numpy as np
dates = ['2014-05-06', '2014-05-07', '2014-05-08', '2014-05-09',
'2014-05-10', '2014-05-11', '2014-05-12', '2014-05-13']
converted_dates = np.array(dates, dtype='datetime64[ms]')
ydata = range(0,8)
pyplot.plot(converted_dates, ydata, '-' )
pyplot.show()
Upvotes: 0
Reputation: 16249
Is this the goal? (Threw in rotation because it almost always comes up, with dates.)
datelist = ['2014-05-06', '2014-05-07', '2014-05-08', '2014-05-09', '2014-05-10', '2014-05-11', '2014-05-12', '2014-05-13']
import matplotlib
from matplotlib import pyplot
from matplotlib import dates
import datetime
converted_dates = list(map(datetime.datetime.strptime, datelist, len(datelist)*['%Y-%m-%d']))
x_axis = converted_dates
formatter = dates.DateFormatter('%Y-%m-%d')
y_axis = range(0,8)
pyplot.plot( x_axis, y_axis, '-' )
ax = pyplot.gcf().axes[0]
ax.xaxis.set_major_formatter(formatter)
pyplot.gcf().autofmt_xdate(rotation=25)
pyplot.show()
Upvotes: 8
Reputation: 339150
The idea of using matplotlib.dates.datestr2num
is in principle correct. You would then need to tell matplotlib to actually interprete the resulting numbers as dates. One easy option is to use plot_date
instead of plot
.
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.dates
dates = ['2014-05-06', '2014-05-07', '2014-05-08', '2014-05-09',
'2014-05-10', '2014-05-11', '2014-05-12', '2014-05-13']
converted_dates = matplotlib.dates.datestr2num(dates)
x_axis = (converted_dates)
y_axis = range(0,8)
plt.plot_date( x_axis, y_axis, '-' )
plt.show()
Upvotes: 4
Reputation: 4036
Try using strptime
. Documentation is here:
https://docs.python.org/2/library/datetime.html#strftime-strptime-behavior
For example:
import datetime
sDate = '2014-05-06'
dtDate = datetime.datetime.strptime(sDate,"%m-%d-%Y")
matplotlib can compare datetime objects.
Upvotes: 0