@@ -674,6 +674,7 @@ def __init__(self, axes, *, pickradius=15, clear=True):
674674 self ._minor_tick_kw = dict ()
675675
676676 self ._cached_ticks_to_draw = None
677+ self ._cached_ticklabel_bboxes = None
677678
678679 if clear :
679680 self .clear ()
@@ -1350,14 +1351,22 @@ def _update_ticks(self, *, _use_cached=False):
13501351 self ._cached_ticks_to_draw = ticks_to_draw
13511352 return ticks_to_draw
13521353
1353- def _get_ticklabel_bboxes (self , ticks , renderer ):
1354+ def _get_ticklabel_bboxes (self , ticks , renderer , * , _use_cached = False ):
13541355 """Return lists of bboxes for ticks' label1's and label2's."""
1355- return ([tick .label1 .get_window_extent (renderer )
1356- for tick in ticks
1357- if tick .label1 .get_visible () and tick .label1 .get_in_layout ()],
1358- [tick .label2 .get_window_extent (renderer )
1359- for tick in ticks
1360- if tick .label2 .get_visible () and tick .label2 .get_in_layout ()])
1356+ # Return cached result if available and requested
1357+ if _use_cached and self ._cached_ticklabel_bboxes is not None :
1358+ return self ._cached_ticklabel_bboxes
1359+
1360+ result = ([tick .label1 .get_window_extent (renderer )
1361+ for tick in ticks
1362+ if tick .label1 .get_visible () and tick .label1 .get_in_layout ()],
1363+ [tick .label2 .get_window_extent (renderer )
1364+ for tick in ticks
1365+ if tick .label2 .get_visible () and tick .label2 .get_in_layout ()])
1366+
1367+ # Cache the result before returning
1368+ self ._cached_ticklabel_bboxes = result
1369+ return result
13611370
13621371 def get_tightbbox (self , renderer = None , * , for_layout_only = False ):
13631372 """
@@ -1381,7 +1390,8 @@ def get_tightbbox(self, renderer=None, *, for_layout_only=False):
13811390 self ._update_label_position (renderer )
13821391
13831392 # go back to just this axis's tick labels
1384- tlb1 , tlb2 = self ._get_ticklabel_bboxes (ticks_to_draw , renderer )
1393+ tlb1 , tlb2 = self ._get_ticklabel_bboxes (ticks_to_draw , renderer ,
1394+ _use_cached = False )
13851395
13861396 self ._update_offset_text_position (tlb1 , tlb2 )
13871397 self .offsetText .set_text (self .major .formatter .get_offset ())
@@ -1428,11 +1438,13 @@ def draw(self, renderer):
14281438 return
14291439 renderer .open_group (__name__ , gid = self .get_gid ())
14301440
1431- # Clear tick cache for this draw cycle
1441+ # Clear caches for this draw cycle
14321442 self ._cached_ticks_to_draw = None
1443+ self ._cached_ticklabel_bboxes = None
14331444
14341445 ticks_to_draw = self ._update_ticks (_use_cached = True )
1435- tlb1 , tlb2 = self ._get_ticklabel_bboxes (ticks_to_draw , renderer )
1446+ tlb1 , tlb2 = self ._get_ticklabel_bboxes (ticks_to_draw , renderer ,
1447+ _use_cached = True )
14361448
14371449 for tick in ticks_to_draw :
14381450 tick .draw (renderer )
@@ -2269,7 +2281,8 @@ def _get_tick_boxes_siblings(self, renderer):
22692281 for ax in grouper .get_siblings (self .axes ):
22702282 axis = ax ._axis_map [name ]
22712283 ticks_to_draw = axis ._update_ticks (_use_cached = True )
2272- tlb , tlb2 = axis ._get_ticklabel_bboxes (ticks_to_draw , renderer )
2284+ tlb , tlb2 = axis ._get_ticklabel_bboxes (ticks_to_draw , renderer ,
2285+ _use_cached = True )
22732286 bboxes .extend (tlb )
22742287 bboxes2 .extend (tlb2 )
22752288 return bboxes , bboxes2
0 commit comments