From d9169cbaff28f0e0d53209125c4f20a7c5600a1c Mon Sep 17 00:00:00 2001 From: David Stansby Date: Tue, 12 Jul 2022 15:32:19 +0100 Subject: [PATCH 1/6] Add test for axis label when units set Fix indentation --- lib/matplotlib/testing/jpl_units/UnitDbl.py | 2 ++ lib/matplotlib/tests/test_units.py | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/lib/matplotlib/testing/jpl_units/UnitDbl.py b/lib/matplotlib/testing/jpl_units/UnitDbl.py index b713ab3aba67..d7abc42ad46e 100644 --- a/lib/matplotlib/testing/jpl_units/UnitDbl.py +++ b/lib/matplotlib/testing/jpl_units/UnitDbl.py @@ -91,6 +91,8 @@ def __bool__(self): def _cmp(self, op, rhs): """Check that *self* and *rhs* share units; compare them using *op*.""" + if rhs is None: + return NotImplemented self.checkSameUnits(rhs, "compare") return op(self._value, rhs._value) diff --git a/lib/matplotlib/tests/test_units.py b/lib/matplotlib/tests/test_units.py index d3b8c5a71643..1fd97cba22ee 100644 --- a/lib/matplotlib/tests/test_units.py +++ b/lib/matplotlib/tests/test_units.py @@ -283,3 +283,23 @@ def test_plot_kernel(): # just a smoketest that fail kernel = Kernel([1, 2, 3, 4, 5]) plt.plot(kernel) + + +@check_figures_equal(extensions=['png']) +def test_unit_axis_label(fig_test, fig_ref): + import matplotlib.testing.jpl_units as units + units.register() + + data = [0 * units.km, 1 * units.km, 2 * units.km] + + ax_test = fig_test.subplots() + ax_ref = fig_ref.subplots() + axs = [ax_test, ax_ref] + + for ax in axs: + ax.yaxis.set_units('km') + ax.set_xlim(10, 20) + ax.set_ylim(10, 20) + + ax_test.scatter([1, 2, 3], data, edgecolors='none') + ax_ref.plot([1, 2, 3], data, marker='o', linewidth=0) From 31dee3ac15d347d552291d0a992d663b932a1dc7 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Tue, 12 Jul 2022 15:57:34 +0100 Subject: [PATCH 2/6] Fix unit info setting axis label --- lib/matplotlib/axes/_base.py | 4 +++- lib/matplotlib/axis.py | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index ebe1ef7911d4..99c3129cfb7d 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -2580,7 +2580,9 @@ def _process_unit_info(self, datasets=None, kwargs=None, *, convert=True): except KeyError: raise ValueError(f"Invalid axis name: {axis_name!r}") from None # Update from data if axis is already set but no unit is set yet. - if axis is not None and data is not None and not axis.have_units(): + if (axis is not None and + data is not None and not + axis.have_units_and_converter()): axis.update_units(data) for axis_name, axis in axis_map.items(): # Return if no axis is set. diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 2f5dd6dcc0ea..16de8de4af0d 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -1652,8 +1652,17 @@ def _update_axisinfo(self): self.set_default_intervals() def have_units(self): + """ + Return `True` if units or a converter have been set. + """ return self.converter is not None or self.units is not None + def have_units_and_converter(self): + """ + Return `True` if units and a converter have been set. + """ + return self.converter is not None and self.units is not None + def convert_units(self, x): # If x is natively supported by Matplotlib, doesn't need converting if munits._is_natively_supported(x): From 30922ead7733fbe63d8bb337ce0549aba0fab227 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Tue, 12 Jul 2022 16:21:52 +0100 Subject: [PATCH 3/6] Update units_rectangle baseline image --- .../test_patches/units_rectangle.png | Bin 13497 -> 14606 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/matplotlib/tests/baseline_images/test_patches/units_rectangle.png b/lib/matplotlib/tests/baseline_images/test_patches/units_rectangle.png index 651e1e2ef95abee7665af3bee799b786a4525782..f60e962f342c9bc00f4384594e5c3ca31d2f3af2 100644 GIT binary patch literal 14606 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 literal 13497 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 Date: Wed, 13 Jul 2022 09:23:01 +0100 Subject: [PATCH 4/6] Make have_units_and_converter private --- lib/matplotlib/axes/_base.py | 2 +- lib/matplotlib/axis.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index 99c3129cfb7d..db01dd1702d2 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -2582,7 +2582,7 @@ def _process_unit_info(self, datasets=None, kwargs=None, *, convert=True): # Update from data if axis is already set but no unit is set yet. if (axis is not None and data is not None and not - axis.have_units_and_converter()): + axis._have_units_and_converter()): axis.update_units(data) for axis_name, axis in axis_map.items(): # Return if no axis is set. diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 16de8de4af0d..73f2c09a87bf 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -1657,7 +1657,7 @@ def have_units(self): """ return self.converter is not None or self.units is not None - def have_units_and_converter(self): + def _have_units_and_converter(self): """ Return `True` if units and a converter have been set. """ From c4329408d6af5f4b8ec6b20040c87de291b2af01 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Mon, 19 Sep 2022 20:56:35 +0100 Subject: [PATCH 5/6] Improve unit axis label test --- lib/matplotlib/tests/test_units.py | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/lib/matplotlib/tests/test_units.py b/lib/matplotlib/tests/test_units.py index 1fd97cba22ee..85a63ecc2f10 100644 --- a/lib/matplotlib/tests/test_units.py +++ b/lib/matplotlib/tests/test_units.py @@ -285,21 +285,17 @@ def test_plot_kernel(): plt.plot(kernel) -@check_figures_equal(extensions=['png']) -def test_unit_axis_label(fig_test, fig_ref): +@pytest.mark.parametrize('plot_meth_name', ['scatter', 'plot']) +def test_unit_axis_label(plot_meth_name): + # Check that the correct Axis labels are set on plots with units import matplotlib.testing.jpl_units as units units.register() - data = [0 * units.km, 1 * units.km, 2 * units.km] - - ax_test = fig_test.subplots() - ax_ref = fig_ref.subplots() - axs = [ax_test, ax_ref] - - for ax in axs: - ax.yaxis.set_units('km') - ax.set_xlim(10, 20) - ax.set_ylim(10, 20) - - ax_test.scatter([1, 2, 3], data, edgecolors='none') - ax_ref.plot([1, 2, 3], data, marker='o', linewidth=0) + fig, ax = plt.subplots() + ax.xaxis.set_units('m') + ax.yaxis.set_units('sec') + plot_method = getattr(ax, plot_meth_name) + plot_method(np.arange(3) * units.m, np.arange(3) * units.sec) + assert ax.get_xlabel() == 'm' + assert ax.get_ylabel() == 'sec' + plt.close('all') From a5a4f2cb2f977d419df0afc4b21c9aee9a8bc4f7 Mon Sep 17 00:00:00 2001 From: David Stansby Date: Fri, 25 Nov 2022 22:01:05 +0000 Subject: [PATCH 6/6] Fix logic line break Co-authored-by: Elliott Sales de Andrade --- lib/matplotlib/axes/_base.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/axes/_base.py b/lib/matplotlib/axes/_base.py index db01dd1702d2..76ee0185480b 100644 --- a/lib/matplotlib/axes/_base.py +++ b/lib/matplotlib/axes/_base.py @@ -2581,8 +2581,8 @@ def _process_unit_info(self, datasets=None, kwargs=None, *, convert=True): raise ValueError(f"Invalid axis name: {axis_name!r}") from None # Update from data if axis is already set but no unit is set yet. if (axis is not None and - data is not None and not - axis._have_units_and_converter()): + data is not None and + not axis._have_units_and_converter()): axis.update_units(data) for axis_name, axis in axis_map.items(): # Return if no axis is set.