Skip to content

Commit 62fe17f

Browse files
committed
Merge pull request #774 from efiring/figure_tight_kwarg
Allow automatic use of tight_layout.
2 parents b70c75d + ea0630a commit 62fe17f

File tree

3 files changed

+43
-3
lines changed

3 files changed

+43
-3
lines changed

lib/matplotlib/figure.py

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ class Figure(Artist):
240240
For multiple figure images, the figure will make composite
241241
images depending on the renderer option_image_nocomposite
242242
function. If suppressComposite is True|False, this will
243-
override the renderer
243+
override the renderer.
244244
"""
245245

246246
def __str__(self):
@@ -254,6 +254,7 @@ def __init__(self,
254254
linewidth = 0.0, # the default linewidth of the frame
255255
frameon = True, # whether or not to draw the figure frame
256256
subplotpars = None, # default to rc
257+
tight_layout = None, # default to rc figure.autolayout
257258
):
258259
"""
259260
*figsize*
@@ -276,6 +277,11 @@ def __init__(self,
276277
277278
*subplotpars*
278279
A :class:`SubplotParams` instance, defaults to rc
280+
281+
*tight_layout*
282+
If *False* use *subplotpars*; if *True* adjust subplot
283+
parameters using :meth:`tight_layout`. Defaults to
284+
rc ``figure.autolayout``.
279285
"""
280286
Artist.__init__(self)
281287

@@ -311,6 +317,7 @@ def __init__(self,
311317
subplotpars = SubplotParams()
312318

313319
self.subplotpars = subplotpars
320+
self.set_tight_layout(tight_layout)
314321

315322
self._axstack = AxesStack() # track all figure axes and current axes
316323
self.clf()
@@ -329,6 +336,24 @@ def _set_dpi(self, dpi):
329336
self.callbacks.process('dpi_changed', self)
330337
dpi = property(_get_dpi, _set_dpi)
331338

339+
def get_tight_layout(self):
340+
"""
341+
Return the Boolean flag, True to use :meth`tight_layout` when drawing.
342+
"""
343+
return self._tight
344+
345+
def set_tight_layout(self, tight):
346+
"""
347+
Set whether :meth:`tight_layout` is used upon drawing.
348+
If None, the rcParams['figure.autolayout'] value will be set.
349+
350+
ACCEPTS: [True | False | None]
351+
"""
352+
if tight is None:
353+
tight = rcParams['figure.autolayout']
354+
tight = bool(tight)
355+
self._tight = tight
356+
332357
def autofmt_xdate(self, bottom=0.2, rotation=30, ha='right'):
333358
"""
334359
Date ticklabels often overlap, so it is useful to rotate them
@@ -865,6 +890,13 @@ def draw(self, renderer):
865890
if not self.get_visible(): return
866891
renderer.open_group('figure')
867892

893+
if self.get_tight_layout() and self.axes:
894+
try:
895+
self.tight_layout(renderer)
896+
except ValueError:
897+
pass
898+
# ValueError can occur when resizing a window.
899+
868900
if self.frameon: self.patch.draw(renderer)
869901

870902
# a list of (zorder, func_to_call, list_of_args)
@@ -1244,7 +1276,7 @@ def colorbar(self, mappable, cax=None, ax=None, **kw):
12441276
"""
12451277
if ax is None:
12461278
ax = self.gca()
1247-
use_gridspec = kw.pop("use_gridspec", False)
1279+
use_gridspec = kw.pop("use_gridspec", True)
12481280
if cax is None:
12491281
if use_gridspec and isinstance(ax, SubplotBase):
12501282
cax, kw = cbar.make_axes_gridspec(ax, **kw)
@@ -1387,6 +1419,12 @@ def tight_layout(self, renderer=None, pad=1.08, h_pad=None, w_pad=None, rect=Non
13871419

13881420
from tight_layout import get_renderer, get_tight_layout_figure
13891421

1422+
no_go = [ax for ax in self.axes if not isinstance(ax, SubplotBase)]
1423+
if no_go:
1424+
warnings.Warn("Cannot use tight_layout;"
1425+
" all Axes must descend from SubplotBase")
1426+
return
1427+
13901428
if renderer is None:
13911429
renderer = get_renderer(self)
13921430

lib/matplotlib/rcsetup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -547,7 +547,7 @@ def __call__(self, s):
547547
'figure.dpi' : [ 80, validate_float], # DPI
548548
'figure.facecolor' : [ '0.75', validate_color], # facecolor; scalar gray
549549
'figure.edgecolor' : [ 'w', validate_color], # edgecolor; white
550-
'figure.autolayout' : [ False, validate_autolayout],
550+
'figure.autolayout' : [ False, validate_bool],
551551

552552
'figure.subplot.left' : [0.125, ValidateInterval(0, 1, closedmin=True, closedmax=True)],
553553
'figure.subplot.right' : [0.9, ValidateInterval(0, 1, closedmin=True, closedmax=True)],

matplotlibrc.template

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -301,6 +301,8 @@ text.hinting_factor : 8 # Specifies the amount of softness for hinting in the
301301
#figure.dpi : 80 # figure dots per inch
302302
#figure.facecolor : 0.75 # figure facecolor; 0.75 is scalar gray
303303
#figure.edgecolor : white # figure edgecolor
304+
#figure.autolayout : False # When True, automatically adjust subplot
305+
# parameters to make the plot fit the figure
304306

305307
# The figure subplot parameters. All dimensions are a fraction of the
306308
# figure width or height

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy