Skip to content

Commit d91da91

Browse files
Cache ticks and ticklabel bboxes for 3d axes
1 parent 777feb6 commit d91da91

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

lib/mpl_toolkits/mplot3d/axes3d.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,9 @@ def draw(self, renderer):
450450
artist.do_3d_projection()
451451

452452
if self._axis3don:
453+
for axis in self._axis_map.values():
454+
axis._cached_ticks_to_draw = None
455+
axis._cached_ticklabel_bboxes = None
453456
# Draw panes first
454457
for axis in self._axis_map.values():
455458
axis.draw_pane(renderer)

lib/mpl_toolkits/mplot3d/axis3d.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -435,7 +435,7 @@ def _axmask(self):
435435

436436
def _draw_ticks(self, renderer, edgep1, centers, deltas, highs,
437437
deltas_per_point, pos):
438-
ticks = self._update_ticks()
438+
ticks = self._update_ticks(_use_cached=True)
439439
info = self._axinfo
440440
index = info["i"]
441441
juggled = info["juggled"]
@@ -629,14 +629,18 @@ def draw(self, renderer):
629629
renderer.close_group('axis3d')
630630
self.stale = False
631631

632+
# Reset cached values for next draw cycle, in case not called by Axes3D.draw()
633+
self._cached_ticks_to_draw = None
634+
self._cached_ticklabel_bboxes = None
635+
632636
@artist.allow_rasterization
633637
def draw_grid(self, renderer):
634638
if not self.axes._draw_grid:
635639
return
636640

637641
renderer.open_group("grid3d", gid=self.get_gid())
638642

639-
ticks = self._update_ticks()
643+
ticks = self._update_ticks(_use_cached=True)
640644
if len(ticks):
641645
# Get general axis information:
642646
info = self._axinfo
@@ -705,7 +709,10 @@ def get_tightbbox(self, renderer=None, *, for_layout_only=False):
705709

706710
ticks = ticks_to_draw
707711

708-
bb_1, bb_2 = self._get_ticklabel_bboxes(ticks, renderer)
712+
# Don't use cached values here - get_tightbbox() is called during
713+
# layout calculations (e.g., constrained_layout) outside of draw(),
714+
# and must always recalculate to reflect current state.
715+
bb_1, bb_2 = self._get_ticklabel_bboxes(ticks, renderer, _use_cached=False)
709716
other = []
710717

711718
if self.offsetText.get_visible() and self.offsetText.get_text():

0 commit comments

Comments
 (0)