Plotting a numpy masked array against a list of datetime objects, plt.plot functions as expected, but plt.scatter still displays the masked data. Auto-axis limits do respect the masked data though.
Code for reproduction
importmatplotlib.pyplotaspltimportnumpy.maasmafromdatetimeimportdatetime# Create a list of datetime objectstime_unmasked= [datetime(2022, 11, 24, 4, 49, 52),
datetime(2022, 11, 24, 4, 49, 53),
datetime(2022, 11, 24, 4, 49, 54),
datetime(2022, 11, 24, 4, 49, 55),
datetime(2022, 11, 24, 4, 49, 56),
datetime(2022, 11, 24, 4, 49, 57),
datetime(2022, 11, 24, 4, 49, 58)]
# Create a masked array with three masked variables, one datapoint far from othersdata_masked=ma.array([15,14,50,15,15,15,16], mask=[0,0,1,1,1,0,0])
# Line plot (expected behaviour)plt.plot(time_unmasked, data_masked)
plt.show()
# Scatter plot (plots masked points, but ignores masked values when auto-setting axis limits)plt.scatter(time_unmasked, data_masked)
plt.show()
Actual outcome
plot behaves as expected.
scatter unexpectedly draws the masked datapoints, but axes limits are still respecting the masked array as the masked y=50 value is not visible.
Expected outcome
Scatter should not plot the masked data even though all timestamps are unmasked.
Additional information
It seems as though there is a check within matplotlib.pyplot.scatter that is not catching. I'd expect that logic to check that if either x or y were masked, to not plot that point. The datetime object is able to slip through. I've also tried putting time_unmasked within a numpy masked array with the same mask as masked_data (so both x and y have the same mask), but the same unexpected behaviour occurs.
changed the title [-][Bug]: matplotlib.pyplot.scatter does not respect mask rules with datetime[/-][+][Bug]: `matplotlib.pyplot.scatter` does not respect mask rules with datetime[/+]on Nov 25, 2022
changed the title [-][Bug]: `matplotlib.pyplot.scatter` does not respect mask rules with datetime[/-][+][Bug]: `matplotlib.pyplot.scatter` does not respect mask rules with `datetime`[/+]on Nov 25, 2022
Thanks @Benblob688 for the report, and for providing such a clear minimal example. I've reproduced this bug on main (development version) and back to version 3.3.
Activity
rcomer commented on Nov 25, 2022
Thanks @Benblob688 for the report, and for providing such a clear minimal example. I've reproduced this bug on main (development version) and back to version 3.3.
rcomer commented on Nov 25, 2022
A workaround for the meantime may be to use something like