Skip to content

Commit 4745eac

Browse files
committed
FIX
1 parent 78442c4 commit 4745eac

File tree

2 files changed

+44
-36
lines changed

2 files changed

+44
-36
lines changed

examples/subplots_axes_and_figures/colorbar_placement.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
"""
2+
.. _colorbar_placement:
3+
24
=================
35
Placing Colorbars
46
=================

tutorials/intermediate/constrainedlayout_guide.py

Lines changed: 42 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3,38 +3,46 @@
33
Constrained Layout Guide
44
================================
55
6-
How to use constrained-layout to fit plots within your figure cleanly.
6+
Use Constrained layout to fit plots within your figure cleanly.
77
8-
*constrained_layout* automatically adjusts subplots and decorations like
9-
legends and colorbars so that they fit in the figure window while still
10-
preserving, as best they can, the logical layout requested by the user.
8+
Constrained layout automatically adjusts subplots so that decorations like tick
9+
labels, legends, and colorbars do not overlap, while still preserving the
10+
logical layout requested by the user.
1111
12-
*constrained_layout* is similar to
13-
:doc:`tight_layout</tutorials/intermediate/tight_layout_guide>`,
14-
but uses a constraint solver to determine the size of axes that allows
15-
them to fit.
12+
Constrained layout is similar to :doc:`Tight
13+
layout</tutorials/intermediate/tight_layout_guide>`, but is substantially more
14+
flexible. It handles colorbars placed on multiple axes
15+
(:ref:`colorbar_placement`) nested layouts (`~.Figure.subfigures`) and Axes that
16+
span rows or columns (`~.pyplot.subplot_mosaic`), striving to align spines from
17+
axes in the same row or column. In addition, :ref:`Compressed layout
18+
<compressed_layout>` will try and move fixed aspect-ratio axes closer together.
19+
These features are described in this document, as well as some
20+
:ref:`implementation details <cl_notes_on_algorithm>` discussed at the end.
1621
17-
*constrained_layout* typically needs to be activated before any axes are
18-
added to a figure. Two ways of doing so are
22+
Constrained layout typically needs to be activated before any axes are added to
23+
a figure. Two ways of doing so are
1924
2025
* using the respective argument to :func:`~.pyplot.subplots` or
2126
:func:`~.pyplot.figure`, e.g.::
2227
2328
plt.subplots(layout="constrained")
2429
25-
* activate it via :ref:`rcParams<customizing-with-dynamic-rc-settings>`,
26-
like::
30+
* activate it via :ref:`rcParams<customizing-with-dynamic-rc-settings>`, like::
2731
2832
plt.rcParams['figure.constrained_layout.use'] = True
2933
3034
Those are described in detail throughout the following sections.
3135
36+
.. warning::
37+
38+
Calling ``plt.tight_layout()`` will turn off Constrained layout!
39+
3240
Simple Example
3341
==============
3442
3543
In Matplotlib, the location of axes (including subplots) are specified in
36-
normalized figure coordinates. It can happen that your axis labels or
37-
titles (or sometimes even ticklabels) go outside the figure area, and are thus
44+
normalized figure coordinates. It can happen that your axis labels or titles
45+
(or sometimes even ticklabels) go outside the figure area, and are thus
3846
clipped.
3947
"""
4048

@@ -92,22 +100,18 @@ def example_plot(ax, fontsize=12, hide_labels=False):
92100
for ax in axs.flat:
93101
example_plot(ax)
94102

95-
# %%
96-
# Colorbars
103+
# %% Colorbars
97104
# =========
98105
#
99-
# If you create a colorbar with `.Figure.colorbar`,
100-
# you need to make room for it. ``constrained_layout`` does this
101-
# automatically. Note that if you specify ``use_gridspec=True`` it will be
102-
# ignored because this option is made for improving the layout via
103-
# ``tight_layout``.
106+
# If you create a colorbar with `.Figure.colorbar`, you need to make room for
107+
# it. Constrained layout does this automatically. Note that if you
108+
# specify ``use_gridspec=True`` it will be ignored because this option is made
109+
# for improving the layout via ``tight_layout``.
104110
#
105111
# .. note::
106112
#
107113
# For the `~.axes.Axes.pcolormesh` keyword arguments (``pc_kwargs``) we use a
108-
# dictionary. Below we will assign one colorbar to a number of axes each
109-
# containing a `~.cm.ScalarMappable`; specifying the norm and colormap
110-
# ensures the colorbar is accurate for all the axes.
114+
# dictionary to keep the calls consistent across this document.
111115

112116
arr = np.arange(100).reshape((10, 10))
113117
norm = mcolors.Normalize(vmin=0., vmax=100.)
@@ -142,7 +146,7 @@ def example_plot(ax, fontsize=12, hide_labels=False):
142146
# Suptitle
143147
# =========
144148
#
145-
# ``constrained_layout`` can also make room for `~.Figure.suptitle`.
149+
# Constrained layout can also make room for `~.Figure.suptitle`.
146150

147151
fig, axs = plt.subplots(2, 2, figsize=(4, 4), layout="constrained")
148152
for ax in axs.flat:
@@ -274,7 +278,7 @@ def example_plot(ax, fontsize=12, hide_labels=False):
274278

275279
# %%
276280
# GridSpecs also have optional *hspace* and *wspace* keyword arguments,
277-
# that will be used instead of the pads set by ``constrained_layout``:
281+
# that will be used instead of the pads set by Constrained layout:
278282

279283
fig, axs = plt.subplots(2, 2, layout="constrained",
280284
gridspec_kw={'wspace': 0.3, 'hspace': 0.2})
@@ -424,7 +428,7 @@ def example_plot(ax, fontsize=12, hide_labels=False):
424428

425429
# %%
426430
# Rather than using subgridspecs, Matplotlib now provides `~.Figure.subfigures`
427-
# which also work with ``constrained_layout``:
431+
# which also work with Constrained layout:
428432

429433
fig = plt.figure(layout="constrained")
430434
sfigs = fig.subfigures(1, 2, width_ratios=[1, 2])
@@ -448,7 +452,7 @@ def example_plot(ax, fontsize=12, hide_labels=False):
448452
#
449453
# There can be good reasons to manually set an Axes position. A manual call
450454
# to `~.axes.Axes.set_position` will set the axes so constrained_layout has
451-
# no effect on it anymore. (Note that ``constrained_layout`` still leaves the
455+
# no effect on it anymore. (Note that Constrained layout still leaves the
452456
# space for the axes that is moved).
453457

454458
fig, axs = plt.subplots(1, 2, layout="constrained")
@@ -461,7 +465,7 @@ def example_plot(ax, fontsize=12, hide_labels=False):
461465
# Grids of fixed aspect-ratio Axes: "compressed" layout
462466
# =====================================================
463467
#
464-
# ``constrained_layout`` operates on the grid of "original" positions for
468+
# Constrained layout operates on the grid of "original" positions for
465469
# axes. However, when Axes have fixed aspect ratios, one side is usually made
466470
# shorter, and leaves large gaps in the shortened direction. In the following,
467471
# the Axes are square, but the figure quite wide so there is a horizontal gap:
@@ -485,17 +489,17 @@ def example_plot(ax, fontsize=12, hide_labels=False):
485489

486490

487491
# %%
488-
# Manually turning off ``constrained_layout``
492+
# Manually turning off Constrained layout
489493
# ===========================================
490494
#
491-
# ``constrained_layout`` usually adjusts the axes positions on each draw
495+
# Constrained layout usually adjusts the axes positions on each draw
492496
# of the figure. If you want to get the spacing provided by
493-
# ``constrained_layout`` but not have it update, then do the initial
497+
# Constrained layout but not have it update, then do the initial
494498
# draw and then call ``fig.set_layout_engine(None)``.
495499
# This is potentially useful for animations where the tick labels may
496500
# change length.
497501
#
498-
# Note that ``constrained_layout`` is turned off for ``ZOOM`` and ``PAN``
502+
# Note that Constrained layout is turned off for ``ZOOM`` and ``PAN``
499503
# GUI events for the backends that use the toolbar. This prevents the
500504
# axes from changing position during zooming and panning.
501505
#
@@ -506,11 +510,11 @@ def example_plot(ax, fontsize=12, hide_labels=False):
506510
# Incompatible functions
507511
# ----------------------
508512
#
509-
# ``constrained_layout`` will work with `.pyplot.subplot`, but only if the
513+
# Constrained layout will work with `.pyplot.subplot`, but only if the
510514
# number of rows and columns is the same for each call.
511515
# The reason is that each call to `.pyplot.subplot` will create a new
512516
# `.GridSpec` instance if the geometry is not the same, and
513-
# ``constrained_layout``. So the following works fine:
517+
# Constrained layout. So the following works fine:
514518

515519
fig = plt.figure(layout="constrained")
516520

@@ -560,7 +564,7 @@ def example_plot(ax, fontsize=12, hide_labels=False):
560564
# Other Caveats
561565
# -------------
562566
#
563-
# * ``constrained_layout`` only considers ticklabels, axis labels, titles, and
567+
# * Constrained layout only considers ticklabels, axis labels, titles, and
564568
# legends. Thus, other artists may be clipped and also may overlap.
565569
#
566570
# * It assumes that the extra space needed for ticklabels, axis labels,
@@ -595,6 +599,8 @@ def example_plot(ax, fontsize=12, hide_labels=False):
595599
# not require outside data or dependencies (other than numpy).
596600

597601
# %%
602+
# .. _cl_notes_on_algorithm:
603+
#
598604
# Notes on the algorithm
599605
# ======================
600606
#

0 commit comments

Comments
 (0)