@@ -2470,34 +2470,47 @@ def _update_title_position(self, renderer):
2470
2470
x , y = title .get_position ()
2471
2471
if not np .isclose (y , 1.0 ):
2472
2472
self ._autotitlepos = False
2473
- _log .debug ('not adjusting title pos because title was'
2473
+ _log .debug ('not adjusting title pos because a title was'
2474
2474
' already placed manually: %f' , y )
2475
2475
return
2476
2476
self ._autotitlepos = True
2477
2477
2478
+ ymax = - 10
2478
2479
for title in titles :
2479
2480
x , y0 = title .get_position ()
2480
- y = 1.0
2481
+ y = y0
2482
+ bt = title .get_window_extent (renderer )
2481
2483
# need to check all our twins too...
2482
2484
axs = self ._twinned_axes .get_siblings (self )
2483
2485
2484
2486
for ax in axs :
2485
2487
try :
2488
+ bb = ax .get_window_extent (renderer )
2486
2489
if (ax .xaxis .get_label_position () == 'top'
2487
2490
or ax .xaxis .get_ticks_position () == 'top' ):
2488
- bb = ax .xaxis .get_tightbbox (renderer )
2489
- top = bb .ymax
2490
- # we don't need to pad because the padding is already
2491
- # in __init__: titleOffsetTrans
2492
- yn = self .transAxes .inverted ().transform ((0. , top ))[1 ]
2493
- y = max (y , yn )
2491
+ bb = mtransforms .Bbox .union ([bb ,
2492
+ ax .xaxis .get_tightbbox (renderer )])
2493
+ # need to do twice to get right for manual resizing
2494
+ dy = bt .ymin - bb .ymax
2495
+ if dy < 0 :
2496
+ y = self .transAxes .inverted ().transform (
2497
+ (0. , bb .ymax - dy ))[1 ]
2498
+ title .set_position ((x , y ))
2499
+ #bt = title.get_window_extent(renderer)
2494
2500
except AttributeError :
2495
- pass
2501
+ y = 1
2502
+ ymax = np .max ((y , ymax ))
2503
+ for title in titles :
2504
+ # now line up all the titles at the highest baseline.
2505
+ x , y0 = title .get_position ()
2506
+ title .set_position ((x , ymax ))
2507
+
2508
+
2496
2509
2497
- title .set_position ((x , y ))
2498
2510
2499
- # Drawing
2500
2511
2512
+
2513
+ # Drawing
2501
2514
@allow_rasterization
2502
2515
def draw (self , renderer = None , inframe = False ):
2503
2516
"""Draw everything (plot lines, axes, labels)"""
@@ -4133,19 +4146,19 @@ def get_tightbbox(self, renderer, call_axes_locator=True):
4133
4146
if bb_xaxis :
4134
4147
bb .append (bb_xaxis )
4135
4148
4136
- self ._update_title_position (renderer )
4137
- bb .append (self .get_window_extent (renderer ))
4149
+ bb_yaxis = self .yaxis .get_tightbbox (renderer )
4150
+ if bb_yaxis :
4151
+ bb .append (bb_yaxis )
4138
4152
4153
+ self ._update_title_position (renderer )
4139
4154
if self .title .get_visible ():
4140
4155
bb .append (self .title .get_window_extent (renderer ))
4141
4156
if self ._left_title .get_visible ():
4142
4157
bb .append (self ._left_title .get_window_extent (renderer ))
4143
4158
if self ._right_title .get_visible ():
4144
4159
bb .append (self ._right_title .get_window_extent (renderer ))
4145
4160
4146
- bb_yaxis = self .yaxis .get_tightbbox (renderer )
4147
- if bb_yaxis :
4148
- bb .append (bb_yaxis )
4161
+ bb .append (self .get_window_extent (renderer ))
4149
4162
4150
4163
for child in self .get_children ():
4151
4164
if isinstance (child , OffsetBox ) and child .get_visible ():
0 commit comments