8000 Factor out handling of missing spines in alignment calculations. · matplotlib/matplotlib@6a0cc70 · GitHub
[go: up one dir, main page]

Skip to content

Commit 6a0cc70

Browse files
committed
Factor out handling of missing spines in alignment calculations.
... by using spines.get. Note that for an Axes, get_window_extent (with or without the renderer argument) is always equal to ax.bbox; the refactoring also makes that symmetry clearer.
1 parent 7157a19 commit 6a0cc70

File tree

2 files changed

+22
-54
lines changed

2 files changed

+22
-54
lines changed

lib/matplotlib/axes/_base.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3007,11 +3007,8 @@ def _update_title_position(self, renderer):
30073007
or ax.xaxis.get_label_position() == 'top'):
30083008
bb = ax.xaxis.get_tightbbox(renderer)
30093009
if bb is None:
3010-
if 'outline' in ax.spines:
3011-
# Special case for colorbars:
3012-
bb = ax.spines['outline'].get_window_extent()
3013-
else:
3014-
bb = ax.get_window_extent(renderer)
3010+
# Extent of the outline for colorbars, of the axes otherwise.
3011+
bb = ax.spines.get("outline", ax).get_window_extent()
30153012
top = max(top, bb.ymax)
30163013
if title.get_text():
30173014
ax.yaxis.get_tightbbox(renderer) # update offsetText

lib/matplotlib/axis.py

Lines changed: 20 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2400,34 +2400,19 @@ def _update_label_position(self, renderer):
24002400
# get bounding boxes for this axis and any siblings
24012401
# that have been set by `fig.align_xlabels()`
24022402
bboxes, bboxes2 = self._get_tick_boxes_siblings(renderer=renderer)
2403-
2403+
ax = self.axes
24042404
x, y = self.label.get_position()
2405+
24052406
if self.label_position == 'bottom':
2406-
try:
2407-
spine = self.axes.spines['bottom']
2408-
spinebbox = spine.get_window_extent()
2409-
except KeyError:
2410-
# use Axes if spine doesn't exist
2411-
spinebbox = self.axes.bbox
2412-
bbox = mtransforms.Bbox.union(bboxes + [spinebbox])
2413-
bottom = bbox.y0
2414-
2415-
self.label.set_position(
2416-
(x, bottom - self.labelpad * self.figure.dpi / 72)
2417-
)
2407+
# Union with extents of the bottom spine if present, of the axes otherwise.
2408+
bbox = mtransforms.Bbox.union(
2409+
[*bboxes, ax.spines.get("bottom", ax).get_window_extent()])
2410+
self.label.set_position((x, bbox.y0 - self.labelpad * self.figure.dpi / 72))
24182411
else:
2419-
try:
2420-
spine = self.axes.spines['top']
2421-
spinebbox = spine.get_window_extent()
2422-
except KeyError:
2423-
# use Axes if spine doesn't exist
2424-
spinebbox = self.axes.bbox
2425-
bbox = mtransforms.Bbox.union(bboxes2 + [spinebbox])
2426-
top = bbox.y1
2427-
2428-
self.label.set_position(
2429-
(x, top + self.labelpad * self.figure.dpi / 72)
2430-
)
2412+
# Union with extents of the top spine if present, of the axes otherwise.
2413+
bbox = mtransforms.Bbox.union(
2414+
[*bboxes2, ax.spines.get("top", ax).get_window_extent()])
2415+
self.label.set_position((x, bbox.y1 + self.labelpad * self.figure.dpi / 72))
24312416

24322417
def _update_offset_text_position(self, bboxes, bboxes2):
24332418
"""
@@ -2641,33 +2626,19 @@ def _update_label_position(self, renderer):
26412626
# get bounding boxes for this axis and any siblings
26422627
# that have been set by `fig.align_ylabels()`
26432628
bboxes, bboxes2 = self._get_tick_boxes_siblings(renderer=renderer)
2629+
ax = self.axes
26442630
x, y = self.label.get_position()
2645-
if self.label_position == 'left':
2646-
try:
2647-
spine = self.axes.spines['left']
2648-
spinebbox = spine.get_window_extent()
2649-
except KeyError:
2650-
# use Axes if spine doesn't exist
2651-
spinebbox = self.axes.bbox
2652-
bbox = mtransforms.Bbox.union(bboxes + [spinebbox])
2653-
left = bbox.x0
2654-
self.label.set_position(
2655-
(left - self.labelpad * self.figure.dpi / 72, y)
2656-
)
26572631

2632+
if self.label_position == 'left':
2633+
# Union with extents of the left spine if present, of the axes otherwise.
2634+
bbox = mtransforms.Bbox.union(
2635+
[*bboxes, ax.spines.get("left", ax).get_window_extent()])
2636+
self.label.set_position((bbox.x0 - self.labelpad * self.figure.dpi / 72, y))
26582637
else:
2659-
try:
2660-
spine = self.axes.spines['right']
2661-
spinebbox = spine.get_window_extent()
2662-
except KeyError:
2663-
# use Axes if spine doesn't exist
2664-
spinebbox = self.axes.bbox
2665-
2666-
bbox = mtransforms.Bbox.union(bboxes2 + [spinebbox])
2667-
right = bbox.x1
2668-
self.label.set_position(
2669-
(right + self.labelpad * self.figure.dpi / 72, y)
2670-
)
2638+
# Union with extents of the right spine if present, of the axes otherwise.
2639+
bbox = mtransforms.Bbox.union(
2640+
[*bboxes2, ax.spines.get("right", ax).get_window_extent()])
2641+
self.label.set_position((bbox.x1 + self.labelpad * self.figure.dpi / 72, y))
26712642

26722643
def _update_offset_text_position(self, bboxes, bboxes2):
26732644
"""

0 commit comments

Comments
 (0)
0