diff --git a/lib/matplotlib/axis.py b/lib/matplotlib/axis.py index d814924463a9..e986e6e40326 100644 --- a/lib/matplotlib/axis.py +++ b/lib/matplotlib/axis.py @@ -2175,9 +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): + 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_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, + ) 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..3776b6f054b9 100644 --- a/lib/matplotlib/tests/test_axis.py +++ b/lib/matplotlib/tests/test_axis.py @@ -111,3 +111,20 @@ 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_ticks_emits_lim_changed(): + 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) + ax2.set_rticks([1, 2, 3]) + assert called_polar