@@ -115,7 +115,7 @@ def __call__(self, ax, renderer):
115115 # time as transSubfigure may otherwise change after this is evaluated.
116116 return mtransforms .TransformedBbox (
117117 mtransforms .Bbox .from_bounds (* self ._bounds ),
118- self ._transform - ax .figure .transSubfigure )
118+ self ._transform - ax .get_figure ( root = False ) .transSubfigure )
119119
120120
121121def _process_plot_format (fmt , * , ambiguous_fmt_datakey = False ):
@@ -788,7 +788,7 @@ def get_subplotspec(self):
788788 def set_subplotspec (self , subplotspec ):
789789 """Set the `.SubplotSpec`. associated with the subplot."""
790790 self ._subplotspec = subplotspec
791- self ._set_position (subplotspec .get_position (self .figure ))
791+ self ._set_position (subplotspec .get_position (self .get_figure ( root = False ) ))
792792
793793 def get_gridspec (self ):
794794 """Return the `.GridSpec` associated with the subplot, or None."""
@@ -959,8 +959,9 @@ def get_xaxis_text1_transform(self, pad_points):
959959 """
960960 labels_align = mpl .rcParams ["xtick.alignment" ]
961961 return (self .get_xaxis_transform (which = 'tick1' ) +
962- mtransforms .ScaledTranslation (0 , - 1 * pad_points / 72 ,
963- self .figure .dpi_scale_trans ),
962+ mtransforms .ScaledTranslation (
963+ 0 , - 1 * pad_points / 72 ,
964+ self .get_figure (root = False ).dpi_scale_trans ),
964965 "top" , labels_align )
965966
966967 def get_xaxis_text2_transform (self , pad_points ):
@@ -985,8 +986,9 @@ def get_xaxis_text2_transform(self, pad_points):
985986 """
986987 labels_align = mpl .rcParams ["xtick.alignment" ]
987988 return (self .get_xaxis_transform (which = 'tick2' ) +
988- mtransforms .ScaledTranslation (0 , pad_points / 72 ,
989- self .figure .dpi_scale_trans ),
989+ mtransforms .ScaledTranslation (
990+ 0 , pad_points / 72 ,
991+ self .get_figure (root = False ).dpi_scale_trans ),
990992 "bottom" , labels_align )
991993
992994 def get_yaxis_transform (self , which = 'grid' ):
@@ -1039,8 +1041,9 @@ def get_yaxis_text1_transform(self, pad_points):
10391041 """
10401042 labels_align = mpl .rcParams ["ytick.alignment" ]
10411043 return (self .get_yaxis_transform (which = 'tick1' ) +
1042- mtransforms .ScaledTranslation (- 1 * pad_points / 72 , 0 ,
1043- self .figure .dpi_scale_trans ),
1044+ mtransforms .ScaledTranslation (
1045+ - 1 * pad_points / 72 , 0 ,
1046+ self .get_figure (root = False ).dpi_scale_trans ),
10441047 labels_align , "right" )
10451048
10461049 def get_yaxis_text2_transform (self , pad_points ):
@@ -1065,8 +1068,9 @@ def get_yaxis_text2_transform(self, pad_points):
10651068 """
10661069 labels_align = mpl .rcParams ["ytick.alignment" ]
10671070 return (self .get_yaxis_transform (which = 'tick2' ) +
1068- mtransforms .ScaledTranslation (pad_points / 72 , 0 ,
1069- self .figure .dpi_scale_trans ),
1071+ mtransforms .ScaledTranslation (
1072+ pad_points / 72 , 0 ,
1073+ self .get_figure (root = False ).dpi_scale_trans ),
10701074 labels_align , "left" )
10711075
10721076 def _update_transScale (self ):
@@ -1173,7 +1177,7 @@ def get_axes_locator(self):
11731177
11741178 def _set_artist_props (self , a ):
11751179 """Set the boilerplate props for artists added to Axes."""
1176- a .set_figure (self .figure )
1180+ a .set_figure (self .get_figure ( root = False ) )
11771181 if not a .is_transform_set ():
11781182 a .set_transform (self .transData )
11791183
@@ -1347,7 +1351,7 @@ def __clear(self):
13471351 # the other artists. We use the frame to draw the edges so we are
13481352 # setting the edgecolor to None.
13491353 self .patch = self ._gen_axes_patch ()
1350- self .patch .set_figure (self .figure )
1354+ self .patch .set_figure (self .get_figure ( root = False ) )
13511355 self .patch .set_facecolor (self ._facecolor )
13521356 self .patch .set_edgecolor ('none' )
13531357 self .patch .set_linewidth (0 )
@@ -1522,7 +1526,7 @@ def _set_title_offset_trans(self, title_offset_points):
15221526 """
15231527 self .titleOffsetTrans = mtransforms .ScaledTranslation (
15241528 0.0 , title_offset_points / 72 ,
1525- self .figure .dpi_scale_trans )
1529+ self .get_figure ( root = False ) .dpi_scale_trans )
15261530 for _title in (self .title , self ._left_title , self ._right_title ):
15271531 _title .set_transform (self .transAxes + self .titleOffsetTrans )
15281532 _title .set_clip_box (None )
@@ -1937,7 +1941,7 @@ def apply_aspect(self, position=None):
19371941 self ._set_position (position , which = 'active' )
19381942 return
19391943
1940- trans = self .get_figure ().transSubfigure
1944+ trans = self .get_figure (root = False ).transSubfigure
19411945 bb = mtransforms .Bbox .unit ().transformed (trans )
19421946 # this is the physical aspect of the panel (or figure):
19431947 fig_aspect = bb .height / bb .width
@@ -2274,7 +2278,7 @@ def add_child_axes(self, ax):
22742278
22752279 self .child_axes .append (ax )
22762280 ax ._remove_method = functools .partial (
2277- self .figure ._remove_axes , owners = [self .child_axes ])
2281+ self .get_figure ( root = False ) ._remove_axes , owners = [self .child_axes ])
22782282 self .stale = True
22792283 return ax
22802284
@@ -3022,7 +3026,8 @@ def _update_title_position(self, renderer):
30223026 axs = set ()
30233027 axs .update (self .child_axes )
30243028 axs .update (self ._twinned_axes .get_siblings (self ))
3025- axs .update (self .figure ._align_label_groups ['title' ].get_siblings (self ))
3029+ axs .update (
3030+ self .get_figure (root = False )._align_label_groups ['title' ].get_siblings (self ))
30263031
30273032 for ax in self .child_axes : # Child positions must be updated first.
30283033 locator = ax .get_axes_locator ()
@@ -3108,7 +3113,7 @@ def draw(self, renderer):
31083113 for _axis in self ._axis_map .values ():
31093114 artists .remove (_axis )
31103115
3111- if not self .figure .canvas .is_saving ():
3116+ if not self .get_figure ( root = True ) .canvas .is_saving ():
31123117 artists = [
31133118 a for a in artists
31143119 if not a .get_animated () or isinstance (a , mimage .AxesImage )]
@@ -3136,10 +3141,10 @@ def draw(self, renderer):
31363141 artists = [self .patch ] + artists
31373142
31383143 if artists_rasterized :
3139- _draw_rasterized (self .figure , artists_rasterized , renderer )
3144+ _draw_rasterized (self .get_figure ( root = True ) , artists_rasterized , renderer )
31403145
31413146 mimage ._draw_list_compositing_images (
3142- renderer , self , artists , self .figure .suppressComposite )
3147+ renderer , self , artists , self .get_figure ( root = True ) .suppressComposite )
31433148
31443149 renderer .close_group ('axes' )
31453150 self .stale = False
@@ -3148,7 +3153,7 @@ def draw_artist(self, a):
31483153 """
31493154 Efficiently redraw a single artist.
31503155 """
3151- a .draw (self .figure .canvas .get_renderer ())
3156+ a .draw (self .get_figure ( root = True ) .canvas .get_renderer ())
31523157
31533158 def redraw_in_frame (self ):
31543159 """
@@ -3158,7 +3163,7 @@ def redraw_in_frame(self):
31583163 for artist in [* self ._axis_map .values (),
31593164 self .title , self ._left_title , self ._right_title ]:
31603165 stack .enter_context (artist ._cm_set (visible = False ))
3161- self .draw (self .figure .canvas .get_renderer ())
3166+ self .draw (self .get_figure ( root = True ) .canvas .get_renderer ())
31623167
31633168 # Axes rectangle characteristics
31643169
@@ -4466,7 +4471,7 @@ def get_tightbbox(self, renderer=None, call_axes_locator=True,
44664471
44674472 bb = []
44684473 if renderer is None :
4469- renderer = self .figure ._get_renderer ()
4474+ renderer = self .get_figure ( root = True ) ._get_renderer ()
44704475
44714476 if not self .get_visible ():
44724477 return None
@@ -4517,9 +4522,9 @@ def _make_twin_axes(self, *args, **kwargs):
45174522 raise ValueError ("Twinned Axes may share only one axis" )
45184523 ss = self .get_subplotspec ()
45194524 if ss :
4520- twin = self .figure .add_subplot (ss , * args , ** kwargs )
4525+ twin = self .get_figure ( root = False ) .add_subplot (ss , * args , ** kwargs )
45214526 else :
4522- twin = self .figure .add_axes (
4527+ twin = self .get_figure ( root = False ) .add_axes (
45234528 self .get_position (True ), * args , ** kwargs ,
45244529 axes_locator = _TransformedBoundsLocator (
45254530 [0 , 0 , 1 , 1 ], self .transAxes ))
@@ -4748,6 +4753,12 @@ def __init__(self, figure, artists):
47484753 self .figure = figure
47494754 self .artists = artists
47504755
4756+ def get_figure (self , root = False ):
4757+ if root :
4758+ return self .figure .get_figure (root = True )
4759+ else :
4760+ return self .figure
4761+
47514762 @martist .allow_rasterization
47524763 def draw (self , renderer ):
47534764 for a in self .artists :
0 commit comments