6464
6565######################################################
6666def do_constrained_layout (fig , h_pad , w_pad ,
67- hspace = None , wspace = None ):
67+ hspace = None , wspace = None , rect = ( 0 , 0 , 1 , 1 ) ):
6868 """
6969 Do the constrained_layout. Called at draw time in
7070 ``figure.constrained_layout()``
@@ -87,14 +87,18 @@ def do_constrained_layout(fig, h_pad, w_pad,
8787 of 0.1 of the figure width between each column.
8888 If h/wspace < h/w_pad, then the pads are used instead.
8989
90+ rect : tuple of 4 floats
91+ Rectangle in figure coordinates to perform constrained layout in
92+ [left, bottom, width, height], each from 0-1.
93+
9094 Returns
9195 -------
9296 layoutgrid : private debugging structure
9397 """
9498
9599 renderer = _get_renderer (fig )
96100 # make layoutgrid tree...
97- layoutgrids = make_layoutgrids (fig , None )
101+ layoutgrids = make_layoutgrids (fig , None , rect = rect )
98102 if not layoutgrids ['hasgrids' ]:
99103 _api .warn_external ('There are no gridspecs with layoutgrids. '
100104 'Possibly did not call parent GridSpec with the'
@@ -133,7 +137,7 @@ def do_constrained_layout(fig, h_pad, w_pad,
133137 return layoutgrids
134138
135139
136- def make_layoutgrids (fig , layoutgrids ):
140+ def make_layoutgrids (fig , layoutgrids , rect = [ 0 , 0 , 1 , 1 ] ):
137141 """
138142 Make the layoutgrid tree.
139143
@@ -147,8 +151,9 @@ def make_layoutgrids(fig, layoutgrids):
147151 layoutgrids = dict ()
148152 layoutgrids ['hasgrids' ] = False
149153 if not hasattr (fig , '_parent' ):
150- # top figure
151- layoutgrids [fig ] = mlayoutgrid .LayoutGrid (parent = None , name = 'figlb' )
154+ # top figure; pass rect as parent to allow user-specified
155+ # margins
156+ layoutgrids [fig ] = mlayoutgrid .LayoutGrid (parent = rect , name = 'figlb' )
152157 else :
153158 # subfigure
154159 gs = fig ._subplotspec .get_gridspec ()
0 commit comments