Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c6765aa

Browse files
Fix tests
1 parent e4dc2dc commit c6765aa

4 files changed

Lines changed: 39 additions & 30 deletions

File tree

lib/matplotlib/axes/_base.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3199,6 +3199,11 @@ def draw(self, renderer):
31993199

32003200
self._update_title_position(renderer)
32013201

3202+
# Clear axis tick caches for this draw cycle
3203+
for _axis in self._axis_map.values():
3204+
_axis._cached_ticks_to_draw = None
3205+
_axis._cached_ticklabel_bboxes = None
3206+
32023207
if not self.axison:
32033208
for _axis in self._axis_map.values():
32043209
artists.remove(_axis)

lib/matplotlib/axis.py

Lines changed: 30 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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':

lib/matplotlib/spines.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ def get_window_extent(self, renderer=None):
155155
if self.axis is None or not self.axis.get_visible():
156156
return bb
157157
bboxes = [bb]
158-
drawn_ticks = self.axis._update_ticks(_use_cached=True)
158+
drawn_ticks = self.axis._update_ticks(_use_cache=True)
159159

160160
major_tick = next(iter({*drawn_ticks} & {*self.axis.majorTicks}), None)
161161
minor_tick = next(iter({*drawn_ticks} & {*self.axis.minorTicks}), None)

lib/mpl_toolkits/mplot3d/axis3d.py

Lines changed: 3 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(_use_cached=True)
438+
ticks = self._update_ticks(_use_cache=True)
439439
info = self._axinfo
440440
index = info["i"]
441441
juggled = info["juggled"]
@@ -640,7 +640,7 @@ def draw_grid(self, renderer):
640640

641641
renderer.open_group("grid3d", gid=self.get_gid())
642642

643-
ticks = self._update_ticks(_use_cached=True)
643+
ticks = self._update_ticks(_use_cache=True)
644644
if len(ticks):
645645
# Get general axis information:
646646
info = self._axinfo
@@ -712,7 +712,7 @@ def get_tightbbox(self, renderer=None, *, for_layout_only=False):
712712
# Don't use cached values here - get_tightbbox() is called during
713713
# layout calculations (e.g., constrained_layout) outside of draw(),
714714
# and must always recalculate to reflect current state.
715-
bb_1, bb_2 = self._get_ticklabel_bboxes(ticks, renderer, _use_cached=False)
715+
bb_1, bb_2 = self._get_ticklabel_bboxes(ticks, renderer, _use_cache=False)
716716
other = []
717717

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

0 commit comments

Comments
 (0)