Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c234384

Browse files
jklymakrcomer
andcommitted
DOC: add a couple more placement examples, crosslink axes_grid [ci doc]
Co-authored-by: Ruth Comer <[email protected]>
1 parent 7d2acfd commit c234384

File tree

3 files changed

+88
-12
lines changed

3 files changed

+88
-12
lines changed

galleries/examples/axes_grid1/demo_colorbar_with_axes_divider.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
"""
2+
.. _demo-colorbar-with-axes-divider:
3+
24
=========================
35
Colorbar with AxesDivider
46
=========================
@@ -8,6 +10,10 @@
810
method of the `.AxesDivider` can then be used to create a new axes on a given
911
side ("top", "right", "bottom", or "left") of the original axes. This example
1012
uses `.append_axes` to add colorbars next to axes.
13+
14+
Users should consider simply passing the main axes to the *ax* keyword argument of
15+
`~.Figure.colorbar` instead of creating a locatable axes manually like this.
16+
See :ref:`colorbar_placement`.
1117
"""
1218

1319
import matplotlib.pyplot as plt

galleries/examples/axes_grid1/demo_colorbar_with_inset_locator.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
"""
2+
.. _demo-colorbar-with-inset-locator:
3+
24
==============================================================
35
Controlling the position and size of colorbars with Inset Axes
46
==============================================================
57
6-
This example shows how to control the position, height, and width of
7-
colorbars using `~mpl_toolkits.axes_grid1.inset_locator.inset_axes`.
8+
This example shows how to control the position, height, and width of colorbars
9+
using `~mpl_toolkits.axes_grid1.inset_locator.inset_axes`.
810
911
Inset axes placement is controlled as for legends: either by providing a *loc*
1012
option ("upper right", "best", ...), or by providing a locator with respect to
1113
the parent bbox. Parameters such as *bbox_to_anchor* and *borderpad* likewise
1214
work in the same way, and are also demonstrated here.
15+
16+
Users should consider using `.Axes.inset_axes` instead (see
17+
:ref:`colorbar_placement`).
18+
1319
"""
1420

1521
import matplotlib.pyplot as plt

galleries/users_explain/axes/colorbar_placement.py

Lines changed: 74 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@
2828
fig.colorbar(pcm, ax=ax)
2929

3030
# %%
31-
# The first column has the same type of data in both rows, so it may
32-
# be desirable to combine the colorbar which we do by calling
33-
# `.Figure.colorbar` with a list of axes instead of a single axes.
31+
# The first column has the same type of data in both rows, so it may be
32+
# desirable to have just one colorbar. We do this by passing `.Figure.colorbar`
33+
# a list of axes with the *ax* kwarg.
3434

3535
fig, axs = plt.subplots(2, 2)
3636
cmaps = ['RdBu_r', 'viridis']
@@ -56,8 +56,74 @@
5656
fig.colorbar(pcm, ax=[axs[2, 1]], location='left')
5757

5858
# %%
59-
# Colorbars with fixed-aspect-ratio axes
60-
# ======================================
59+
# Adjusting the spacing between colorbars and parent axes
60+
# =======================================================
61+
#
62+
# The distance a colorbar is from the parent axes can be adjusted with the
63+
# *pad* keyword argument. This is in units of fraction of the parent axes
64+
# width, and the default for a vertical axes is 0.05 (or 0.15 for a horizontal
65+
# axes).
66+
67+
fig, axs = plt.subplots(3, 1, layout='constrained', figsize=(5, 5))
68+
for ax, pad in zip(axs, [0.025, 0.05, 0.1]):
69+
pcm = ax.pcolormesh(np.random.randn(20, 20), cmap='viridis')
70+
fig.colorbar(pcm, ax=ax, pad=pad, label=f'pad: {pad}')
71+
fig.suptitle("layout='constrained'")
72+
73+
# %%
74+
# Note that if you do not use constrained layout, the pad command makes the
75+
# parent axes shrink:
76+
77+
fig, axs = plt.subplots(3, 1, figsize=(5, 5))
78+
for ax, pad in zip(axs, [0.025, 0.05, 0.1]):
79+
pcm = ax.pcolormesh(np.random.randn(20, 20), cmap='viridis')
80+
fig.colorbar(pcm, ax=ax, pad=pad, label=f'pad: {pad}')
81+
fig.suptitle("No layout manager")
82+
83+
# %%
84+
# Manual placement of colorbars
85+
# =============================
86+
#
87+
# Sometimes the automatic placement provided by ``colorbar`` does not
88+
# give the desired effect. We can manually create an axes and tell
89+
# ``colorbar`` to use that axes by passing the axes to the *cax* keyword
90+
# argument.
91+
#
92+
# Using ``inset_axes``
93+
# --------------------
94+
#
95+
# We can manually create any type of axes for the colorbar to use, but an
96+
# `.Axes.inset_axes` is useful because it is a child of the parent axes and can
97+
# be positioned relative to the parent. Here we add a colorbar centered near
98+
# the bottom of the parent axes.
99+
100+
fig, ax = plt.subplots(layout='constrained', figsize=(4, 4))
101+
pcm = ax.pcolormesh(np.random.randn(20, 20), cmap='viridis')
102+
ax.set_ylim([-4, 20])
103+
cax = ax.inset_axes([0.3, 0.07, 0.4, 0.04])
104+
fig.colorbar(pcm, cax=cax, orientation='horizontal')
105+
106+
# %%
107+
# `.Axes.inset_axes` can also specify its position in data coordinates
108+
# using the *transform* keyword argument if you want your axes at a
109+
# certain data position on the graph:
110+
111+
fig, ax = plt.subplots(layout='constrained', figsize=(4, 4))
112+
pcm = ax.pcolormesh(np.random.randn(20, 20), cmap='viridis')
113+
ax.set_ylim([-4, 20])
114+
cax = ax.inset_axes([7.5, -1.7, 5, 1.2], transform=ax.transData)
115+
fig.colorbar(pcm, cax=cax, orientation='horizontal')
116+
117+
# %%
118+
# .. seealso::
119+
#
120+
# :ref:`axes_grid` has methods for creating colorbar axes as well:
121+
#
122+
# - :ref:`demo-colorbar-with-inset-locator`
123+
# - :ref:`demo-colorbar-with-axes-divider`
124+
#
125+
# Colorbars attached to fixed-aspect-ratio axes
126+
# ---------------------------------------------
61127
#
62128
# Placing colorbars for axes with a fixed aspect ratio pose a particular
63129
# challenge as the parent axes changes size depending on the data view.
@@ -77,8 +143,8 @@
77143
fig.colorbar(pcm, ax=ax, shrink=0.6)
78144

79145
# %%
80-
# One way around this issue is to use an `.Axes.inset_axes` to locate the
81-
# axes in axes coordinates. Note that if you zoom in on the axes, and
146+
# We solve this problem using `.Axes.inset_axes` to locate the axes in axes
147+
# coordinates. Note that if you zoom in on the axes, and thus
82148
# change the shape of the axes, the colorbar will also change position.
83149

84150
fig, axs = plt.subplots(2, 2, layout='constrained')
@@ -94,6 +160,4 @@
94160
ax.set_aspect(1/2)
95161
if row == 1:
96162
cax = ax.inset_axes([1.04, 0.2, 0.05, 0.6])
97-
fig.colorbar(pcm, ax=ax, cax=cax)
98-
99-
plt.show()
163+
fig.colorbar(pcm, cax=cax)

0 commit comments

Comments
 (0)