diff --git a/examples/pylab_examples/load_converter.py b/examples/pylab_examples/load_converter.py index de34e59bc683..3d15fa6e3675 100644 --- a/examples/pylab_examples/load_converter.py +++ b/examples/pylab_examples/load_converter.py @@ -1,5 +1,5 @@ from __future__ import print_function -from matplotlib.dates import strpdate2num +from matplotlib.dates import bytespdate2num #from matplotlib.mlab import load import numpy as np from pylab import figure, show @@ -10,7 +10,7 @@ dates, closes = np.loadtxt( datafile, delimiter=',', - converters={0: strpdate2num('%d-%b-%y')}, + converters={0: bytespdate2num('%d-%b-%y')}, skiprows=1, usecols=(0, 2), unpack=True) fig = figure() diff --git a/lib/matplotlib/dates.py b/lib/matplotlib/dates.py index e3f480a0c139..7823469a8e7c 100755 --- a/lib/matplotlib/dates.py +++ b/lib/matplotlib/dates.py @@ -261,6 +261,32 @@ def __call__(self, s): return date2num(datetime.datetime(*time.strptime(s, self.fmt)[:6])) +class bytespdate2num(strpdate2num): + """ + Use this class to parse date strings to matplotlib datenums when + you know the date format string of the date you are parsing. See + :file:`examples/load_demo.py`. + """ + def __init__(self, fmt, encoding='utf-8'): + """ + Args: + fmt: any valid strptime format is supported + encoding: encoding to use on byte input (default: 'utf-8') + """ + super(bytespdate2num, self).__init__(fmt) + self.encoding = encoding + + def __call__(self, b): + """ + Args: + b: byte input to be converted + Returns: + A date2num float + """ + s = b.decode(self.encoding) + return super(bytespdate2num, self).__call__(s) + + # a version of dateutil.parser.parse that can operate on nump0y arrays _dateutil_parser_parse_np_vectorized = np.vectorize(dateutil.parser.parse)