@@ -2941,6 +2941,32 @@ def handle_single_axis(
29412941scaley ,self ._shared_axes ["y" ],'y' ,self .yaxis ,self ._ymargin ,
29422942y_stickies ,self .set_ybound )
29432943
2944+ def _get_titles_siblings (self ,renderer ):
2945+ """
2946+ Get the bounding boxes for this `.axis` and its siblings
2947+ as set by `.Figure.align_titles`.
2948+
2949+ By default it just gets bboxes for self.
2950+ """
2951+ # Get the Grouper keeping track of title groups for this figure.
2952+ axis_names = [
2953+ name for name ,axis in self .axes ._axis_map .items ()
2954+ if name in self .figure ._align_label_groups and axis is self ]
2955+ if len (axis_names )!= 1 :
2956+ return [], []
2957+ axis_name ,= axis_names
2958+ grouper = self .figure ._align_label_groups [axis_name ]
2959+ bboxes = []
2960+ bboxes2 = []
2961+ # If we want to align labels from other Axes:
2962+ for ax in grouper .get_siblings (self .axes ):
2963+ axis = getattr (ax ,f"{ axis_name } axis" )
2964+ ticks_to_draw = axis ._update_ticks ()
2965+ tlb ,tlb2 = axis ._get_ticklabel_bboxes (ticks_to_draw ,renderer )
2966+ bboxes .extend (tlb )
2967+ bboxes2 .extend (tlb2 )
2968+ return bboxes ,bboxes2
2969+
29442970def _update_title_position (self ,renderer ):
29452971"""
29462972 Update the title position based on the bounding box enclosing
@@ -3003,6 +3029,7 @@ def _update_title_position(self, renderer):
30033029title .set_position ((x ,y ))
30043030
30053031ymax = max (title .get_position ()[1 ]for title in titles )
3032+ # TODO: and for titles in sibling axes according to grouper
30063033for title in titles :
30073034# now line up all the titles at the highest baseline.
30083035x ,_ = title .get_position ()