8000 Support masked dates · matplotlib/matplotlib@1b5ca39 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1b5ca39

Browse files
committed
Support masked dates
1 parent cc85fb6 commit 1b5ca39

File tree

2 files changed

+14
-2
lines changed

2 files changed

+14
-2
lines changed

lib/matplotlib/dates.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -444,7 +444,9 @@ def date2num(d):
444444
if not iterable:
445445
d = [d]
446446

447-
d = np.asarray(d)
447+
masked = np.ma.is_masked(d)
448+
d = np.ma.asanyarray(d)
449+
448450
# convert to datetime64 arrays, if not already:
449451
if not np.issubdtype(d.dtype, np.datetime64):
450452
# datetime arrays
@@ -455,7 +457,7 @@ def date2num(d):
455457
if tzi is not None:
456458
# make datetime naive:
457459
d = [dt.astimezone(UTC).replace(tzinfo=None) for dt in d]
458-
d = np.asarray(d)
460+
d = np.ma.asarray(d) if masked else np.asarray(d)
459461
d = d.astype('datetime64[us]')
460462

461463
d = _dt64_to_ordinalf(d)

lib/matplotlib/tests/test_dates.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,16 @@ def test_date2num_NaT_scalar(units):
6969
assert np.isnan(tmpl)
7070

7171

72+
def test_date2num_masked():
73+
base = datetime.datetime(2022, 12, 15)
74+
dates = np.ma.array([base + datetime.timedelta(days=(2 * i))
75+
for i in range(7)], mask=[0, 1, 1, 0, 0, 0, 1])
76+
npdates = mdates.date2num(dates)
77+
np.testing.assert_array_equal(np.ma.getmask(npdates),
78+
(False, True, True, False, False, False,
79+
True))
80+
81+
7282
def test_date_empty():
7383
# make sure we do the right thing when told to plot dates even
7484
# if no date data has been presented, cf

0 commit comments

Comments
 (0)
0