From fdf900b0b23a17b1182ec931b2cd98cd16fb31d6 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Sat, 7 Mar 2026 17:13:04 +0530 Subject: [PATCH 01/25] Emit xlim/ylim_changed when limits expand via set_xticks/set_yticks --- lib/matplotlib/axis.py | 5 +++++ lib/matplotlib/tests/test_axis.py | 36 +++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index d814924463a9..b0c53429732f 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2175,9 +2175,14 @@ def _set_tick_locations(self, ticks, *, minor=False): ticks = self.convert_units(ticks) locator = mticker.FixedLocator(ticks) # validate ticks early. if len(ticks): + get_lim = getattr(self.axes, f"get_{self.axis_name}lim") + old_limits = get_lim() for axis in self._get_shared_axis(): # set_view_interval maintains any preexisting inversion. axis.set_view_interval(min(ticks), max(ticks)) + new_limits = get_lim() + if new_limits != old_limits: + self.axes.callbacks.process(f"{self.axis_name}lim_changed", self.axes) self.axes.stale = True if minor: self.set_minor_locator(locator) diff --git a/lib/matplotlib/tests/test_axis.py b/lib/matplotlib/tests/test_axis.py index 67d9ed5bde62..e42b170a203f 100644 --- a/lib/matplotlib/tests/test_axis.py +++ b/lib/matplotlib/tests/test_axis.py @@ -111,3 +111,39 @@ def test_grid_rcparams(): assert ax.xaxis.get_minor_ticks()[0].gridline.get_linestyle() == def_linestyle assert ax.xaxis.get_major_ticks()[0].gridline.get_alpha() == def_alpha assert ax.xaxis.get_minor_ticks()[0].gridline.get_alpha() == 0.6 + + +def test_set_xticks_emits_xlim_changed(): + fig, ax = plt.subplots() + + calls = [] + + def on_change(axis): + calls.append(axis.get_xlim()) + + ax.callbacks.connect("xlim_changed", on_change) + + ax.set_xlim(0.5, 1) + ax.set_xticks([0, 100]) + + assert len(calls) == 2 + assert calls[0] == (0.5, 1.0) + assert calls[1] == (0.0, 100.0) + + +def test_set_yticks_emits_ylim_changed(): + fig, ax = plt.subplots() + + calls = [] + + def on_change(axis): + calls.append(axis.get_ylim()) + + ax.callbacks.connect("ylim_changed", on_change) + + ax.set_ylim(0.5, 1) + ax.set_yticks([0, 100]) + + assert len(calls) == 2 + assert calls[0] == (0.5, 1.0) + assert calls[1] == (0.0, 100.0) From 8471a338f3622d5a6504be810c8bdd282498f248 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Sat, 7 Mar 2026 17:47:04 +0530 Subject: [PATCH 02/25] error fix --- lib/matplotlib/axis.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index b0c53429732f..379dcceaac7d 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2175,14 +2175,17 @@ def _set_tick_locations(self, ticks, *, minor=False): ticks = self.convert_units(ticks) locator = mticker.FixedLocator(ticks) # validate ticks early. if len(ticks): - get_lim = getattr(self.axes, f"get_{self.axis_name}lim") - old_limits = get_lim() + get_lim = getattr(self.axes, f"get_{self.axis_name}lim", None) + old_limits = get_lim() if get_lim is not None else None for axis in self._get_shared_axis(): # set_view_interval maintains any preexisting inversion. axis.set_view_interval(min(ticks), max(ticks)) - new_limits = get_lim() - if new_limits != old_limits: - self.axes.callbacks.process(f"{self.axis_name}lim_changed", self.axes) + if get_lim is not None: + new_limits = get_lim() + if new_limits != old_limits: + self.axes.callbacks.process( + f"{self.axis_name}lim_changed", self.axes + ) self.axes.stale = True if minor: self.set_minor_locator(locator) From 3d6e92586bbdc36db7ea81d03e3a2edfe4312502 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Mon, 9 Mar 2026 07:38:09 +0530 Subject: [PATCH 03/25] changes done --- lib/matplotlib/axis.py | 16 +++++----------- lib/matplotlib/tests/test_axis.py | 32 +++---------------------------- 2 files changed, 8 insertions(+), 40 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 379dcceaac7d..6c1d12882dec 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2175,17 +2175,11 @@ def _set_tick_locations(self, ticks, *, minor=False): ticks = self.convert_units(ticks) locator = mticker.FixedLocator(ticks) # validate ticks early. if len(ticks): - get_lim = getattr(self.axes, f"get_{self.axis_name}lim", None) - old_limits = get_lim() if get_lim is not None else None - for axis in self._get_shared_axis(): - # set_view_interval maintains any preexisting inversion. - axis.set_view_interval(min(ticks), max(ticks)) - if get_lim is not None: - new_limits = get_lim() - if new_limits != old_limits: - self.axes.callbacks.process( - f"{self.axis_name}lim_changed", self.axes - ) + old_vmin, old_vmax = self.get_view_interval() + self.set_view_interval(min(ticks), max(ticks)) + new_vmin, new_vmax = self.get_view_interval() + if new_vmin != old_vmin or new_vmax != old_vmax: + self._set_lim(new_vmin, new_vmax, auto=False) self.axes.stale = True if minor: self.set_minor_locator(locator) diff --git a/lib/matplotlib/tests/test_axis.py b/lib/matplotlib/tests/test_axis.py index e42b170a203f..5dd96e47b822 100644 --- a/lib/matplotlib/tests/test_axis.py +++ b/lib/matplotlib/tests/test_axis.py @@ -113,37 +113,11 @@ def test_grid_rcparams(): assert ax.xaxis.get_minor_ticks()[0].gridline.get_alpha() == 0.6 -def test_set_xticks_emits_xlim_changed(): +def test_set_ticks_expand_limits(): fig, ax = plt.subplots() - - calls = [] - - def on_change(axis): - calls.append(axis.get_xlim()) - - ax.callbacks.connect("xlim_changed", on_change) - ax.set_xlim(0.5, 1) ax.set_xticks([0, 100]) - - assert len(calls) == 2 - assert calls[0] == (0.5, 1.0) - assert calls[1] == (0.0, 100.0) - - -def test_set_yticks_emits_ylim_changed(): - fig, ax = plt.subplots() - - calls = [] - - def on_change(axis): - calls.append(axis.get_ylim()) - - ax.callbacks.connect("ylim_changed", on_change) - + assert ax.get_xlim() == (0.0, 100.0) ax.set_ylim(0.5, 1) ax.set_yticks([0, 100]) - - assert len(calls) == 2 - assert calls[0] == (0.5, 1.0) - assert calls[1] == (0.0, 100.0) + assert ax.get_ylim() == (0.0, 100.0) From 84ab3ae025c8853ce5ae8cbe0b2c51294f152175 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Mon, 9 Mar 2026 07:58:18 +0530 Subject: [PATCH 04/25] polar error fix --- lib/matplotlib/axis.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 6c1d12882dec..76760b21d920 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2176,8 +2176,7 @@ def _set_tick_locations(self, ticks, *, minor=False): locator = mticker.FixedLocator(ticks) # validate ticks early. if len(ticks): old_vmin, old_vmax = self.get_view_interval() - self.set_view_interval(min(ticks), max(ticks)) - new_vmin, new_vmax = self.get_view_interval() + new_vmin, new_vmax = min(ticks), max(ticks) if new_vmin != old_vmin or new_vmax != old_vmax: self._set_lim(new_vmin, new_vmax, auto=False) self.axes.stale = True From 0538e090c82d25e3b5056cff861a2b1e0c4011b1 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Mon, 9 Mar 2026 08:15:36 +0530 Subject: [PATCH 05/25] changes fixed --- lib/matplotlib/axis.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 76760b21d920..6c1d12882dec 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2176,7 +2176,8 @@ def _set_tick_locations(self, ticks, *, minor=False): locator = mticker.FixedLocator(ticks) # validate ticks early. if len(ticks): old_vmin, old_vmax = self.get_view_interval() - new_vmin, new_vmax = min(ticks), max(ticks) + self.set_view_interval(min(ticks), max(ticks)) + new_vmin, new_vmax = self.get_view_interval() if new_vmin != old_vmin or new_vmax != old_vmax: self._set_lim(new_vmin, new_vmax, auto=False) self.axes.stale = True From 7f9ca1fdca4d3259f987fa43fb6d22e0921baa5f Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Mon, 9 Mar 2026 15:45:38 +0530 Subject: [PATCH 06/25] set axis name to avoid polar issue --- lib/matplotlib/axis.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 6c1d12882dec..078944a865af 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2179,7 +2179,8 @@ def _set_tick_locations(self, ticks, *, minor=False): self.set_view_interval(min(ticks), max(ticks)) new_vmin, new_vmax = self.get_view_interval() if new_vmin != old_vmin or new_vmax != old_vmax: - self._set_lim(new_vmin, new_vmax, auto=False) + if self.axis_name in ("x", "y"): + self._set_lim(new_vmin, new_vmax, auto=False) self.axes.stale = True if minor: self.set_minor_locator(locator) From 1fb701284b24053f0f8e021de3567d89e2ef4c58 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Mon, 9 Mar 2026 16:03:26 +0530 Subject: [PATCH 07/25] initial commit --- lib/matplotlib/axis.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 078944a865af..6c1d12882dec 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2179,8 +2179,7 @@ def _set_tick_locations(self, ticks, *, minor=False): self.set_view_interval(min(ticks), max(ticks)) new_vmin, new_vmax = self.get_view_interval() if new_vmin != old_vmin or new_vmax != old_vmax: - if self.axis_name in ("x", "y"): - self._set_lim(new_vmin, new_vmax, auto=False) + self._set_lim(new_vmin, new_vmax, auto=False) self.axes.stale = True if minor: self.set_minor_locator(locator) From 487cf88e4a33df5ca69ded7539f205e9cbc4ba62 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Tue, 10 Mar 2026 06:26:53 +0530 Subject: [PATCH 08/25] stopping reapplying limits --- lib/matplotlib/axis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 6c1d12882dec..76d40e73de99 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2179,7 +2179,7 @@ def _set_tick_locations(self, ticks, *, minor=False): self.set_view_interval(min(ticks), max(ticks)) new_vmin, new_vmax = self.get_view_interval() if new_vmin != old_vmin or new_vmax != old_vmax: - self._set_lim(new_vmin, new_vmax, auto=False) + self._set_lim(old_vmin, old_vmax, auto=False) self.axes.stale = True if minor: self.set_minor_locator(locator) From 6cbc63f6095891174336708d14900d602ed3ab86 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Tue, 10 Mar 2026 06:44:06 +0530 Subject: [PATCH 09/25] error fixing --- lib/matplotlib/axis.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 76d40e73de99..7f4e4ade13c8 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2176,10 +2176,9 @@ def _set_tick_locations(self, ticks, *, minor=False): locator = mticker.FixedLocator(ticks) # validate ticks early. if len(ticks): old_vmin, old_vmax = self.get_view_interval() - self.set_view_interval(min(ticks), max(ticks)) - new_vmin, new_vmax = self.get_view_interval() + new_vmin, new_vmax =min(ticks), max(ticks) if new_vmin != old_vmin or new_vmax != old_vmax: - self._set_lim(old_vmin, old_vmax, auto=False) + self._set_lim(new_vmin, new_vmax, auto=False) self.axes.stale = True if minor: self.set_minor_locator(locator) From 9b2672433889959fa7bafc7a4cbf9c43d410f09f Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Tue, 10 Mar 2026 07:40:55 +0530 Subject: [PATCH 10/25] back to basic --- lib/matplotlib/axis.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 7f4e4ade13c8..6c1d12882dec 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2176,7 +2176,8 @@ def _set_tick_locations(self, ticks, *, minor=False): locator = mticker.FixedLocator(ticks) # validate ticks early. if len(ticks): old_vmin, old_vmax = self.get_view_interval() - new_vmin, new_vmax =min(ticks), max(ticks) + self.set_view_interval(min(ticks), max(ticks)) + new_vmin, new_vmax = self.get_view_interval() if new_vmin != old_vmin or new_vmax != old_vmax: self._set_lim(new_vmin, new_vmax, auto=False) self.axes.stale = True From ef0d397afde2428610af4e9663c6d36e84c0a04f Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Tue, 10 Mar 2026 14:07:30 +0530 Subject: [PATCH 11/25] set auto as none --- lib/matplotlib/axis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 6c1d12882dec..36bb8a4418b3 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2179,7 +2179,7 @@ def _set_tick_locations(self, ticks, *, minor=False): self.set_view_interval(min(ticks), max(ticks)) new_vmin, new_vmax = self.get_view_interval() if new_vmin != old_vmin or new_vmax != old_vmax: - self._set_lim(new_vmin, new_vmax, auto=False) + self._set_lim(new_vmin, new_vmax, auto=None) self.axes.stale = True if minor: self.set_minor_locator(locator) From 7d95efce7bd8a93aa8ba123126eb57b54eaf0a1f Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Wed, 11 Mar 2026 06:06:11 +0530 Subject: [PATCH 12/25] pushing previous implementation --- lib/matplotlib/axis.py | 16 +++++++++++----- lib/matplotlib/tests/test_axis.py | 9 ++++----- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 36bb8a4418b3..379dcceaac7d 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2175,11 +2175,17 @@ def _set_tick_locations(self, ticks, *, minor=False): ticks = self.convert_units(ticks) locator = mticker.FixedLocator(ticks) # validate ticks early. if len(ticks): - old_vmin, old_vmax = self.get_view_interval() - self.set_view_interval(min(ticks), max(ticks)) - new_vmin, new_vmax = self.get_view_interval() - if new_vmin != old_vmin or new_vmax != old_vmax: - self._set_lim(new_vmin, new_vmax, auto=None) + get_lim = getattr(self.axes, f"get_{self.axis_name}lim", None) + old_limits = get_lim() if get_lim is not None else None + for axis in self._get_shared_axis(): + # set_view_interval maintains any preexisting inversion. + axis.set_view_interval(min(ticks), max(ticks)) + if get_lim is not None: + new_limits = get_lim() + if new_limits != old_limits: + self.axes.callbacks.process( + f"{self.axis_name}lim_changed", self.axes + ) self.axes.stale = True if minor: self.set_minor_locator(locator) diff --git a/lib/matplotlib/tests/test_axis.py b/lib/matplotlib/tests/test_axis.py index 5dd96e47b822..0b5f8521e742 100644 --- a/lib/matplotlib/tests/test_axis.py +++ b/lib/matplotlib/tests/test_axis.py @@ -113,11 +113,10 @@ def test_grid_rcparams(): assert ax.xaxis.get_minor_ticks()[0].gridline.get_alpha() == 0.6 -def test_set_ticks_expand_limits(): +def test_set_ticks_emits_lim_changed(): fig, ax = plt.subplots() ax.set_xlim(0.5, 1) + called = [] + ax.callbacks.connect("xlim_changed", called.append) ax.set_xticks([0, 100]) - assert ax.get_xlim() == (0.0, 100.0) - ax.set_ylim(0.5, 1) - ax.set_yticks([0, 100]) - assert ax.get_ylim() == (0.0, 100.0) + assert called From b45021434eeaa571eeb7d2d83c370574e81aabff Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Wed, 11 Mar 2026 08:19:04 +0530 Subject: [PATCH 13/25] rerun CI From d8708bc24c73ad32128f90cebb00491f984691c0 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Wed, 11 Mar 2026 12:53:09 +0530 Subject: [PATCH 14/25] remove none fallback --- lib/matplotlib/axis.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 379dcceaac7d..341297147093 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2175,17 +2175,16 @@ def _set_tick_locations(self, ticks, *, minor=False): ticks = self.convert_units(ticks) locator = mticker.FixedLocator(ticks) # validate ticks early. if len(ticks): - get_lim = getattr(self.axes, f"get_{self.axis_name}lim", None) - old_limits = get_lim() if get_lim is not None else None + get_lim = getattr(self.axes, f"get_{self.axis_name}lim") + old_limits = get_lim() for axis in self._get_shared_axis(): # set_view_interval maintains any preexisting inversion. axis.set_view_interval(min(ticks), max(ticks)) - if get_lim is not None: - new_limits = get_lim() - if new_limits != old_limits: - self.axes.callbacks.process( - f"{self.axis_name}lim_changed", self.axes - ) + new_limits = get_lim() + if new_limits != old_limits: + self.axes.callbacks.process( + f"{self.axis_name}lim_changed", self.axes + ) self.axes.stale = True if minor: self.set_minor_locator(locator) From 98200def83c2d4918b7e0e2f0a8e4217b685c53e Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Wed, 11 Mar 2026 21:54:40 +0530 Subject: [PATCH 15/25] use get_view_interval() --- lib/matplotlib/axis.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 341297147093..508d104301c6 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2175,12 +2175,11 @@ def _set_tick_locations(self, ticks, *, minor=False): ticks = self.convert_units(ticks) locator = mticker.FixedLocator(ticks) # validate ticks early. if len(ticks): - get_lim = getattr(self.axes, f"get_{self.axis_name}lim") - old_limits = get_lim() + old_limits = self.get_view_interval() for axis in self._get_shared_axis(): # set_view_interval maintains any preexisting inversion. axis.set_view_interval(min(ticks), max(ticks)) - new_limits = get_lim() + new_limits = self.get_view_interval() if new_limits != old_limits: self.axes.callbacks.process( f"{self.axis_name}lim_changed", self.axes From e1d5e64973a284399219ff4c71b81c506ea51067 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Wed, 11 Mar 2026 22:09:12 +0530 Subject: [PATCH 16/25] add guard --- lib/matplotlib/axis.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 508d104301c6..9e7f52fc8058 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2175,11 +2175,15 @@ def _set_tick_locations(self, ticks, *, minor=False): ticks = self.convert_units(ticks) locator = mticker.FixedLocator(ticks) # validate ticks early. if len(ticks): - old_limits = self.get_view_interval() + if self.axis_name in ("x", "theta"): + get_lim = self.axes.get_xlim + else: + get_lim = self.axes.get_ylim + old_limits = get_lim() for axis in self._get_shared_axis(): # set_view_interval maintains any preexisting inversion. axis.set_view_interval(min(ticks), max(ticks)) - new_limits = self.get_view_interval() + new_limits = get_lim() if new_limits != old_limits: self.axes.callbacks.process( f"{self.axis_name}lim_changed", self.axes From 2639ad2a659d05ae6b6641d68373165f09de7b25 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Wed, 11 Mar 2026 22:27:55 +0530 Subject: [PATCH 17/25] push commit --- lib/matplotlib/axis.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 9e7f52fc8058..6d18b5d9c9d4 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2175,16 +2175,12 @@ def _set_tick_locations(self, ticks, *, minor=False): ticks = self.convert_units(ticks) locator = mticker.FixedLocator(ticks) # validate ticks early. if len(ticks): - if self.axis_name in ("x", "theta"): - get_lim = self.axes.get_xlim - else: - get_lim = self.axes.get_ylim - old_limits = get_lim() + old_vmin, old_vmax = self.get_view_interval() for axis in self._get_shared_axis(): # set_view_interval maintains any preexisting inversion. axis.set_view_interval(min(ticks), max(ticks)) - new_limits = get_lim() - if new_limits != old_limits: + new_vmin, new_vmax = self.get_view_interval() + if old_vmin != new_vmin or old_vmax != new_vmax: self.axes.callbacks.process( f"{self.axis_name}lim_changed", self.axes ) From 5ee78581971041e7aec411ccb843935929b668bf Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Thu, 12 Mar 2026 07:23:52 +0530 Subject: [PATCH 18/25] callback --- lib/matplotlib/axis.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 6d18b5d9c9d4..e4e84b1932bf 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2182,8 +2182,9 @@ def _set_tick_locations(self, ticks, *, minor=False): new_vmin, new_vmax = self.get_view_interval() if old_vmin != new_vmin or old_vmax != new_vmax: self.axes.callbacks.process( - f"{self.axis_name}lim_changed", self.axes - ) + f"{self._get_axis_name()}lim_changed", + self.axes + ) self.axes.stale = True if minor: self.set_minor_locator(locator) From b4fd8e3df3bdd022c551b96bf3a6c718a74a4561 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Thu, 12 Mar 2026 07:37:27 +0530 Subject: [PATCH 19/25] callback corrected --- lib/matplotlib/axis.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index e4e84b1932bf..e986e6e40326 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2182,9 +2182,9 @@ def _set_tick_locations(self, ticks, *, minor=False): new_vmin, new_vmax = self.get_view_interval() if old_vmin != new_vmin or old_vmax != new_vmax: self.axes.callbacks.process( - f"{self._get_axis_name()}lim_changed", - self.axes - ) + f"{self._get_axis_name()}lim_changed", + self.axes, + ) self.axes.stale = True if minor: self.set_minor_locator(locator) From 9f81b248e080906ef5bd1d205799fade0048de61 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Thu, 12 Mar 2026 08:25:46 +0530 Subject: [PATCH 20/25] test file update --- lib/matplotlib/tests/test_axis.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/lib/matplotlib/tests/test_axis.py b/lib/matplotlib/tests/test_axis.py index 0b5f8521e742..44436732a1ad 100644 --- a/lib/matplotlib/tests/test_axis.py +++ b/lib/matplotlib/tests/test_axis.py @@ -114,9 +114,15 @@ def test_grid_rcparams(): def test_set_ticks_emits_lim_changed(): - fig, ax = plt.subplots() - ax.set_xlim(0.5, 1) - called = [] - ax.callbacks.connect("xlim_changed", called.append) - ax.set_xticks([0, 100]) - assert called + fig, (ax1, ax2) = plt.subplots(1, 2, subplot_kw=[{}, {"projection": "polar"}]) + ax1.set_xlim(0.5, 1) + called_cartesian = [] + ax1.callbacks.connect("xlim_changed", called_cartesian.append) + ax1.set_xticks([0, 100]) + assert called_cartesian + + ax2.set_ylim(0.5, 1) + called_polar = [] + ax2.callbacks.connect("ylim_changed", called_polar.append) + ax2.set_rticks([1, 2, 3]) + assert called_polar From 062e1421d73fd7d528818e903bc0f4678429ce59 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Thu, 12 Mar 2026 08:29:28 +0530 Subject: [PATCH 21/25] test file updated --- lib/matplotlib/tests/test_axis.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/tests/test_axis.py b/lib/matplotlib/tests/test_axis.py index 44436732a1ad..3776b6f054b9 100644 --- a/lib/matplotlib/tests/test_axis.py +++ b/lib/matplotlib/tests/test_axis.py @@ -114,13 +114,15 @@ def test_grid_rcparams(): def test_set_ticks_emits_lim_changed(): - fig, (ax1, ax2) = plt.subplots(1, 2, subplot_kw=[{}, {"projection": "polar"}]) + fig, ax1 = plt.subplots() ax1.set_xlim(0.5, 1) called_cartesian = [] ax1.callbacks.connect("xlim_changed", called_cartesian.append) ax1.set_xticks([0, 100]) assert called_cartesian + fig = plt.figure() + ax2 = fig.add_subplot(projection="polar") ax2.set_ylim(0.5, 1) called_polar = [] ax2.callbacks.connect("ylim_changed", called_polar.append) From 9afb0ff1551246c2e61c32626527c0d4e423c6c0 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Thu, 12 Mar 2026 08:38:58 +0530 Subject: [PATCH 22/25] re run ci From 9a38457b1140362af20c08faf8d01459fe4a8245 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Tue, 17 Mar 2026 07:01:34 +0530 Subject: [PATCH 23/25] tuple added --- lib/matplotlib/axis.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index e986e6e40326..1846d0a87f5f 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2175,12 +2175,12 @@ def _set_tick_locations(self, ticks, *, minor=False): ticks = self.convert_units(ticks) locator = mticker.FixedLocator(ticks) # validate ticks early. if len(ticks): - old_vmin, old_vmax = self.get_view_interval() + old_view_interval = self.get_view_interval() for axis in self._get_shared_axis(): # set_view_interval maintains any preexisting inversion. axis.set_view_interval(min(ticks), max(ticks)) - new_vmin, new_vmax = self.get_view_interval() - if old_vmin != new_vmin or old_vmax != new_vmax: + new_view_interval = self.get_view_interval() + if old_view_interval != new_view_interval: self.axes.callbacks.process( f"{self._get_axis_name()}lim_changed", self.axes, From 69962d4d0ef8bff78481fca547beb4d43ab70686 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Tue, 17 Mar 2026 07:21:22 +0530 Subject: [PATCH 24/25] revert changes --- lib/matplotlib/axis.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index 1846d0a87f5f..e986e6e40326 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2175,12 +2175,12 @@ def _set_tick_locations(self, ticks, *, minor=False): ticks = self.convert_units(ticks) locator = mticker.FixedLocator(ticks) # validate ticks early. if len(ticks): - old_view_interval = self.get_view_interval() + old_vmin, old_vmax = self.get_view_interval() for axis in self._get_shared_axis(): # set_view_interval maintains any preexisting inversion. axis.set_view_interval(min(ticks), max(ticks)) - new_view_interval = self.get_view_interval() - if old_view_interval != new_view_interval: + new_vmin, new_vmax = self.get_view_interval() + if old_vmin != new_vmin or old_vmax != new_vmax: self.axes.callbacks.process( f"{self._get_axis_name()}lim_changed", self.axes, From 7d37a8384255aecf4b5f62452701db57c6a773f5 Mon Sep 17 00:00:00 2001 From: Chirag3841 Date: Tue, 17 Mar 2026 09:14:28 +0530 Subject: [PATCH 25/25] trigger ci