@@ -260,6 +260,32 @@ def new_locator(self, nx, ny, nx1=None, ny1=None):
260260 """
261261 return AxesLocator (self , nx , ny , nx1 , ny1 )
262262
263+ def append_size (self , position , size ):
264+
265+ if position == "left" :
266+ self ._horizontal .insert (0 , size )
267+ self ._xrefindex += 1
268+ elif position == "right" :
269+ self ._horizontal .append (size )
270+ elif position == "bottom" :
271+ self ._vertical .insert (0 , size )
272+ self ._yrefindex += 1
273+ elif position == "top" :
274+ self ._vertical .append (size )
275+ else :
276+ raise ValueError ("the position must be one of left, right, bottom, or top" )
277+
278+
279+ def add_auto_adjustable_area (self ,
280+ use_axes , pad = 0.1 ,
281+ adjust_dirs = ["left" , "right" , "bottom" , "top" ],
282+ ):
283+ from axes_size import Padded , SizeFromFunc , GetExtentHelper
284+ for d in adjust_dirs :
285+ helper = GetExtentHelper (use_axes , d )
286+ size = SizeFromFunc (helper )
287+ padded_size = Padded (size , pad ) # pad in inch
288+ self .append_size (d , padded_size )
263289
264290
265291class AxesLocator (object ):
@@ -836,6 +862,17 @@ def make_axes_locatable(axes):
836862
837863 return divider
838864
865+ def make_axes_area_auto_adjustable (ax ,
866+ use_axes = None , pad = 0.1 ,
867+ adjust_dirs = ["left" , "right" , "bottom" , "top" ]):
868+
869+ divider = make_axes_locatable (ax )
870+
871+ if use_axes is None :
872+ use_axes = ax
873+
874+ divider .add_auto_adjustable_area (use_axes = use_axes , pad = pad ,
875+ adjust_dirs = adjust_dirs )
839876
840877#from matplotlib.axes import Axes
841878from mpl_axes import Axes
0 commit comments