Closed
Description
Bug report
Bug summary
Cannot plot a fully masked array agaisnt an array of datetimes. A ValueError is raised for a seemingly unrelated reason. Surprisingly, matplotlib has no problem plotting a fully masked array by itself.
Code for reproduction
import matplotlib.pyplot as plt
from datetime import datetime
import numpy as np
x = np.array([
datetime(2017, 1, 1),
datetime(2017, 1, 2),
datetime(2017, 1, 3),
datetime(2017, 1, 4),
datetime(2017, 1, 5)
])
y = np.array([1,2,3,4,5])
m = np.ma.masked_greater(y, 0)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(x, m)
plt.show()
Actual outcome
[super big traceback, only showing the most recent to save space...]
/usr/lib64/python3.5/dist-packages/matplotlib/dates.py in _from_ordinalf(x, tz)
258
259 ix = int(x)
--> 260 dt = datetime.datetime.fromordinal(ix).replace(tzinfo=UTC)
261
262 remainder = float(x) - ix
ValueError: ordinal must be >= 1
Expected outcome
An empty graph. If you comment out x
and don't plot against it, then matplotlib has no problem displaying an empty graph. It is only when you plot against a datetime array this is an issue.
Matplotlib version
- Operating system: GNU/Linux
- Matplotlib version: 2.1.1
- Matplotlib backend (
print(matplotlib.get_backend())
): module://ipykernel.pylab.backend_inline - Python version: 3.5.5
- Jupyter version (if applicable): 4.3.0
- Other libraries: numpy, datetime