From aa193742b6a4d437d4144eaecfb7529cd6af304f Mon Sep 17 00:00:00 2001 From: Jody Klymak Date: Sun, 7 Oct 2018 04:38:36 -0700 Subject: [PATCH] Backport PR #12277: FIX: datetime64 now recognized if in a list --- lib/matplotlib/dates.py | 13 +++++++------ lib/matplotlib/tests/test_dates.py | 6 ++++++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/lib/matplotlib/dates.py b/lib/matplotlib/dates.py index 2f2362332c1b..0a7b3bef1a3f 100644 --- a/lib/matplotlib/dates.py +++ b/lib/matplotlib/dates.py @@ -410,18 +410,19 @@ def date2num(d): Gregorian calendar is assumed; this is not universal practice. For details see the module docstring. """ - if hasattr(d, "values"): # this unpacks pandas series or dataframes... d = d.values - - if ((isinstance(d, np.ndarray) and np.issubdtype(d.dtype, np.datetime64)) - or isinstance(d, np.datetime64)): - return _dt64_to_ordinalf(d) - if not cbook.iterable(d): + if not np.iterable(d): + if (isinstance(d, np.datetime64) or (isinstance(d, np.ndarray) and + np.issubdtype(d.dtype, np.datetime64))): + return _dt64_to_ordinalf(d) return _to_ordinalf(d) + else: d = np.asarray(d) + if np.issubdtype(d.dtype, np.datetime64): + return _dt64_to_ordinalf(d) if not d.size: return d return _to_ordinalf_np_vectorized(d) diff --git a/lib/matplotlib/tests/test_dates.py b/lib/matplotlib/tests/test_dates.py index db153be5ff97..da742c0236c9 100644 --- a/lib/matplotlib/tests/test_dates.py +++ b/lib/matplotlib/tests/test_dates.py @@ -641,3 +641,9 @@ def test_tz_utc(): def test_num2timedelta(x, tdelta): dt = mdates.num2timedelta(x) assert dt == tdelta + + +def test_datetime64_in_list(): + dt = [np.datetime64('2000-01-01'), np.datetime64('2001-01-01')] + dn = mdates.date2num(dt) + assert np.array_equal(dn, [730120., 730486.])