@@ -673,6 +673,8 @@ def __init__(self, axes, *, pickradius=15, clear=True):
673673 self ._major_tick_kw = dict ()
674674 self ._minor_tick_kw = dict ()
675675
676+ self ._cached_ticks_to_draw = None
677+
676678 if clear :
677679 self .clear ()
678680 else :
@@ -1290,11 +1292,15 @@ def _set_artist_props(self, a):
12901292 return
12911293 a .set_figure (self .get_figure (root = False ))
12921294
1293- def _update_ticks (self ):
1295+ def _update_ticks (self , * , _use_cached = False ):
12941296 """
12951297 Update ticks (position and labels) using the current data interval of
12961298 the axes. Return the list of ticks that will be drawn.
12971299 """
1300+ # Return cached result if available and requested
1301+ if _use_cached and self ._cached_ticks_to_draw is not None :
1302+ return self ._cached_ticks_to_draw
1303+
12981304 major_locs = self .get_majorticklocs ()
12991305 major_labels = self .major .formatter .format_ticks (major_locs )
13001306 major_ticks = self .get_major_ticks (len (major_locs ))
@@ -1340,6 +1346,8 @@ def _update_ticks(self):
13401346 if mtransforms ._interval_contains_close (interval_t , loc_t ):
13411347 ticks_to_draw .append (tick )
13421348
1349+ # Cache the result before returning
1350+ self ._cached_ticks_to_draw = ticks_to_draw
13431351 return ticks_to_draw
13441352
13451353 def _get_ticklabel_bboxes (self , ticks , renderer ):
@@ -1365,7 +1373,10 @@ def get_tightbbox(self, renderer=None, *, for_layout_only=False):
13651373 return
13661374 if renderer is None :
13671375 renderer = self .get_figure (root = True )._get_renderer ()
1368- ticks_to_draw = self ._update_ticks ()
1376+ # Don't use cached values here - get_tightbbox() is called during
1377+ # layout calculations (e.g., constrained_layout) outside of draw(),
1378+ # and must always recalculate to reflect current state.
1379+ ticks_to_draw = self ._update_ticks (_use_cached = False )
13691380
13701381 self ._update_label_position (renderer )
13711382
@@ -1417,7 +1428,10 @@ def draw(self, renderer):
14171428 return
14181429 renderer .open_group (__name__ , gid = self .get_gid ())
14191430
1420- ticks_to_draw = self ._update_ticks ()
1431+ # Clear tick cache for this draw cycle
1432+ self ._cached_ticks_to_draw = None
1433+
1434+ ticks_to_draw = self ._update_ticks (_use_cached = True )
14211435 tlb1 , tlb2 = self ._get_ticklabel_bboxes (ticks_to_draw , renderer )
14221436
14231437 for tick in ticks_to_draw :
@@ -2254,7 +2268,7 @@ def _get_tick_boxes_siblings(self, renderer):
22542268 # If we want to align labels from other Axes:
22552269 for ax in grouper .get_siblings (self .axes ):
22562270 axis = ax ._axis_map [name ]
2257- ticks_to_draw = axis ._update_ticks ()
2271+ ticks_to_draw = axis ._update_ticks (_use_cached = True )
22582272 tlb , tlb2 = axis ._get_ticklabel_bboxes (ticks_to_draw , renderer )
22592273 bboxes .extend (tlb )
22602274 bboxes2 .extend (tlb2 )
0 commit comments