8000 FIX: move titles up if overlap axes · matplotlib/matplotlib@afac4da · GitHub
[go: up one dir, main page]

Skip to content

Commit afac4da

Browse files
committed
FIX: move titles up if overlap axes
1 parent 9f74ea7 commit afac4da

File tree

7 files changed

+243
-209
lines changed

7 files changed

+243
-209
lines changed

lib/matplotlib/axes/_base.py

Lines changed: 35 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2501,34 +2501,53 @@ def _update_title_position(self, renderer):
25012501
x, y = title.get_position()
25022502
if not np.isclose(y, 1.0):
25032503
self._autotitlepos = False
2504-
_log.debug('not adjusting title pos because title was'
2504+
_log.debug('not adjusting title pos because a title was'
25052505
' already placed manually: %f', y)
25062506
return
25072507
self._autotitlepos = True
25082508

2509+
ymax = -10
25092510
for title in titles:
25102511
x, y0 = title.get_position()
2511-
y = 1.0
2512+
y = 1
2513+
# need to start agin in case of window resizing
2514+
title.set_position((x, 1.0))
25122515
# need to check all our twins too...
25132516
axs = self._twinned_axes.get_siblings(self)
25142517

2518+
top = 0
25152519
for ax in axs:
25162520
try:
25172521
if (ax.xaxis.get_label_position() == 'top'
25182522
or ax.xaxis.get_ticks_position() == 'top'):
25192523
bb = ax.xaxis.get_tightbbox(renderer)
2520-
top = bb.ymax
2521-
# we don't need to pad because the padding is already
2522-
# in __init__: titleOffsetTrans
2523-
yn = self.transAxes.inverted().transform((0., top))[1]
2524-
y = max(y, yn)
2524+
else:
2525+
bb = ax.get_window_extent(renderer)
2526+
top = np.max((top, bb.ymax))
25252527
except AttributeError:
2526-
pass
2527-
2528-
title.set_position((x, y))
2528+
# this happens for an empty bb
2529+
y = 1
2530+
bt = title.get_window_extent(renderer)
2531+
# need to do twice to get right for manual resizing
2532+
for nn in range(1):
2533+
dy = bt.ymin - top
2534+
if dy < 0:
2535+
y = self.transAxes.inverted().transform(
2536+
(0., top))[1]
2537+
title.set_position((x, y))
2538+
bt = title.get_window_extent(renderer)
2539+
dy = bt.ymin - top
2540+
if dy < 0:
2541+
y = self.transAxes.inverted().transform(
2542+
(0., top - dy))[1]
2543+
title.set_position((x, y))
2544+
ymax = np.max((y, ymax))
2545+
for title in titles:
2546+
# now line up all the titles at the highest baseline.
2547+
x, y0 = title.get_position()
2548+
title.set_position((x, ymax))
25292549

25302550
# Drawing
2531-
25322551
@allow_rasterization
25332552
def draw(self, renderer=None, inframe=False):
25342553
"""Draw everything (plot lines, axes, labels)"""
@@ -4200,19 +4219,19 @@ def get_tightbbox(self, renderer, call_axes_locator=True,
42004219
if bb_xaxis:
42014220
bb.append(bb_xaxis)
42024221

4203-
self._update_title_position(renderer)
4204-
bb.append(self.get_window_extent(renderer))
4222+
bb_yaxis = self.yaxis.get_tightbbox(renderer)
4223+
if bb_yaxis:
4224+
bb.append(bb_yaxis)
42054225

4226+
self._update_title_position(renderer)
42064227
if self.title.get_visible():
42074228
bb.append(self.title.get_window_extent(renderer))
42084229
if self._left_title.get_visible():
42094230
bb.append(self._left_title.get_window_extent(renderer))
42104231
if self._right_title.get_visible():
42114232
bb.append(self._right_title.get_window_extent(renderer))
42124233

4213-
bb_yaxis = self.yaxis.get_tightbbox(renderer)
4214-
if bb_yaxis:
4215-
bb.append(bb_yaxis)
4234+
bb.append(self.get_window_extent(renderer))
42164235

42174236
bbox_artists = bbox_extra_artists
42184237
if bbox_artists is None:
Binary file not shown.
Loading

0 commit comments

Comments
 (0)
0