@@ -1293,13 +1293,13 @@ def _set_artist_props(self, a):
12931293 return
12941294 a .set_figure (self .get_figure (root = False ))
12951295
1296- def _update_ticks (self , * , _use_cached = False ):
1296+ def _update_ticks (self , * , _use_cache = False ):
12971297 """
12981298 Update ticks (position and labels) using the current data interval of
12991299 the axes. Return the list of ticks that will be drawn.
13001300 """
13011301 # Return cached result if available and requested
1302- if _use_cached and self ._cached_ticks_to_draw is not None :
1302+ if _use_cache and self ._cached_ticks_to_draw is not None :
13031303 return self ._cached_ticks_to_draw
13041304
13051305 major_locs = self .get_majorticklocs ()
@@ -1347,14 +1347,15 @@ def _update_ticks(self, *, _use_cached=False):
13471347 if mtransforms ._interval_contains_close (interval_t , loc_t ):
13481348 ticks_to_draw .append (tick )
13491349
1350- # Cache the result before returning
1351- self ._cached_ticks_to_draw = ticks_to_draw
1350+ # Only cache the result when called from the draw path
1351+ if _use_cache :
1352+ self ._cached_ticks_to_draw = ticks_to_draw
13521353 return ticks_to_draw
13531354
1354- def _get_ticklabel_bboxes (self , ticks , renderer , * , _use_cached = False ):
1355+ def _get_ticklabel_bboxes (self , ticks , renderer , * , _use_cache = False ):
13551356 """Return lists of bboxes for ticks' label1's and label2's."""
13561357 # Return cached result if available and requested
1357- if _use_cached and self ._cached_ticklabel_bboxes is not None :
1358+ if _use_cache and self ._cached_ticklabel_bboxes is not None :
13581359 return self ._cached_ticklabel_bboxes
13591360
13601361 result = ([tick .label1 .get_window_extent (renderer )
@@ -1364,8 +1365,9 @@ def _get_ticklabel_bboxes(self, ticks, renderer, *, _use_cached=False):
13641365 for tick in ticks
13651366 if tick .label2 .get_visible () and tick .label2 .get_in_layout ()])
13661367
1367- # Cache the result before returning
1368- self ._cached_ticklabel_bboxes = result
1368+ # Only cache the result when called from the draw path
1369+ if _use_cache :
1370+ self ._cached_ticklabel_bboxes = result
13691371 return result
13701372
13711373 def get_tightbbox (self , renderer = None , * , for_layout_only = False ):
@@ -1385,13 +1387,13 @@ def get_tightbbox(self, renderer=None, *, for_layout_only=False):
13851387 # Don't use cached values here - get_tightbbox() is called during
13861388 # layout calculations (e.g., constrained_layout) outside of draw(),
13871389 # and must always recalculate to reflect current state.
1388- ticks_to_draw = self ._update_ticks (_use_cached = False )
1390+ ticks_to_draw = self ._update_ticks (_use_cache = False )
13891391
1390- self ._update_label_position (renderer )
1392+ self ._update_label_position (renderer , _use_cache = False )
13911393
13921394 # go back to just this axis's tick labels
13931395 tlb1 , tlb2 = self ._get_ticklabel_bboxes (ticks_to_draw , renderer ,
1394- _use_cached = False )
1396+ _use_cache = False )
13951397
13961398 self ._update_offset_text_position (tlb1 , tlb2 )
13971399 self .offsetText .set_text (self .major .formatter .get_offset ())
@@ -1438,19 +1440,15 @@ def draw(self, renderer):
14381440 return
14391441 renderer .open_group (__name__ , gid = self .get_gid ())
14401442
1441- # Clear caches for this draw cycle
1442- self ._cached_ticks_to_draw = None
1443- self ._cached_ticklabel_bboxes = None
1444-
1445- ticks_to_draw = self ._update_ticks (_use_cached = True )
1443+ ticks_to_draw = self ._update_ticks (_use_cache = True )
14461444 tlb1 , tlb2 = self ._get_ticklabel_bboxes (ticks_to_draw , renderer ,
1447- _use_cached = True )
1445+ _use_cache = True )
14481446
14491447 for tick in ticks_to_draw :
14501448 tick .draw (renderer )
14511449
14521450 # Shift label away from axes to avoid overlapping ticklabels.
1453- self ._update_label_position (renderer )
1451+ self ._update_label_position (renderer , _use_cache = True )
14541452 self .label .draw (renderer )
14551453
14561454 self ._update_offset_text_position (tlb1 , tlb2 )
@@ -1460,6 +1458,10 @@ def draw(self, renderer):
14601458 renderer .close_group (__name__ )
14611459 self .stale = False
14621460
1461+ # Reset cached values for next draw cycle, in case not called by Axes.draw()
1462+ self ._cached_ticks_to_draw = None
1463+ self ._cached_ticklabel_bboxes = None
1464+
14631465 def get_gridlines (self ):
14641466 r"""Return this Axis' grid lines as a list of `.Line2D`\s."""
14651467 ticks = self .get_major_ticks ()
@@ -2263,7 +2265,7 @@ def set_ticks(self, ticks, labels=None, *, minor=False, **kwargs):
22632265 self .set_ticklabels (labels , minor = minor , ** kwargs )
22642266 return result
22652267
2266- def _get_tick_boxes_siblings (self , renderer ):
2268+ def _get_tick_boxes_siblings (self , renderer , * , _use_cache = False ):
22672269 """
22682270 Get the bounding boxes for this `.axis` and its siblings
22692271 as set by `.Figure.align_xlabels` or `.Figure.align_ylabels`.
@@ -2280,14 +2282,14 @@ def _get_tick_boxes_siblings(self, renderer):
22802282 # If we want to align labels from other Axes:
22812283 for ax in grouper .get_siblings (self .axes ):
22822284 axis = ax ._axis_map [name ]
2283- ticks_to_draw = axis ._update_ticks (_use_cached = True )
2285+ ticks_to_draw = axis ._update_ticks (_use_cache = _use_cache )
22842286 tlb , tlb2 = axis ._get_ticklabel_bboxes (ticks_to_draw , renderer ,
2285- _use_cached = True )
2287+ _use_cache = _use_cache )
22862288 bboxes .extend (tlb )
22872289 bboxes2 .extend (tlb2 )
22882290 return bboxes , bboxes2
22892291
2290- def _update_label_position (self , renderer ):
2292+ def _update_label_position (self , renderer , * , _use_cache = False ):
22912293 """
22922294 Update the label position based on the bounding box enclosing
22932295 all the ticklabels and axis spine.
@@ -2484,7 +2486,7 @@ def set_label_position(self, position):
24842486 self .label_position = position
24852487 self .stale = True
24862488
2487- def _update_label_position (self , renderer ):
2489+ def _update_label_position (self , renderer , * , _use_cache = False ):
24882490 """
24892491 Update the label position based on the bounding box enclosing
24902492 all the ticklabels and axis spine
@@ -2494,7 +2496,8 @@ def _update_label_position(self, renderer):
24942496
24952497 # get bounding boxes for this axis and any siblings
24962498 # that have been set by `fig.align_xlabels()`
2497- bboxes , bboxes2 = self ._get_tick_boxes_siblings (renderer = renderer )
2499+ bboxes , bboxes2 = self ._get_tick_boxes_siblings (renderer = renderer ,
2500+ _use_cache = _use_cache )
24982501 x , y = self .label .get_position ()
24992502
25002503 if self .label_position == 'bottom' :
@@ -2711,7 +2714,7 @@ def set_label_position(self, position):
27112714 self .label_position = position
27122715 self .stale = True
27132716
2714- def _update_label_position (self , renderer ):
2717+ def _update_label_position (self , renderer , * , _use_cache = False ):
27152718 """
27162719 Update the label position based on the bounding box enclosing
27172720 all the ticklabels and axis spine
@@ -2721,7 +2724,8 @@ def _update_label_position(self, renderer):
27212724
27222725 # get bounding boxes for this axis and any siblings
27232726 # that have been set by `fig.align_ylabels()`
2724- bboxes , bboxes2 = self ._get_tick_boxes_siblings (renderer = renderer )
2727+ bboxes , bboxes2 = self ._get_tick_boxes_siblings (renderer = renderer ,
2728+ _use_cache = _use_cache )
27252729 x , y = self .label .get_position ()
27262730
27272731 if self .label_position == 'left' :
0 commit comments