8000 Merge pull request #28313 from anntzer/missing-spine · matplotlib/matplotlib@2834da1 · GitHub
[go: up one dir, main page]

Skip to content

Commit 2834da1

Browse files
authored
Merge pull request #28313 from anntzer/missing-spine
Factor out handling of missing spines in alignment calculations.
2 parents ccb75d3 + 5c2a0ec commit 2834da1

File tree

2 files changed

+20
-54
lines changed

2 files changed

+20
-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: 18 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -2400,34 +2400,18 @@ 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-
24042403
x, y = self.label.get_position()
2404+
24052405
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-
)
2406+
# Union with extents of the bottom spine if present, of the axes otherwise.
2407+
bbox = mtransforms.Bbox.union([
2408+
*bboxes, self.axes.spines.get("bottom", self.axes).get_window_extent()])
2409+
self.label.set_position((x, bbox.y0 - self.labelpad * self.figure.dpi / 72))
24182410
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-
)
2411+
# Union with extents of the top spine if present, of the axes otherwise.
2412+
bbox = mtransforms.Bbox.union([
2413+
*bboxes2, self.axes.spines.get("top", self.axes).get_window_extent()])
2414+
self.label.set_position((x, bbox.y1 + self.labelpad * self.figure.dpi / 72))
24312415

24322416
def _update_offset_text_position(self, bboxes, bboxes2):
24332417
"""
@@ -2642,32 +2626,17 @@ def _update_label_position(self, renderer):
26422626
# that have been set by `fig.align_ylabels()`
26432627
bboxes, bboxes2 = self._get_tick_boxes_siblings(renderer=renderer)
26442628
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-
)
26572629

2630+
if self.label_position == 'left':
2631+
# Union with extents of the left spine if present, of the axes otherwise.
2632+
bbox = mtransforms.Bbox.union([
2633+
*bboxes, self.axes.spines.get("left", self.axes).get_window_extent()])
2634+
self.label.set_position((bbox.x0 - self.labelpad * self.figure.dpi / 72, y))
26582635
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-
)
2636+
# Union with extents of the right spine if present, of the axes otherwise.
2637+
bbox = mtransforms.Bbox.union([
2638+
*bboxes2, self.axes.spines.get("right", self.axes).get_window_extent()])
2639+
self.label.set_position((bbox.x1 + self.labelpad * self.figure.dpi / 72, y))
26712640

26722641
def _update_offset_text_position(self, bboxes, bboxes2):
26732642
"""

0 commit comments

Comments
 (0)
0