Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit b0ebaca

Browse filesBrowse files
committed
DOC: add layout=compressed to colorbar placement doc
1 parent 5ff6a93 commit b0ebaca
Copy full SHA for b0ebaca

File tree

Expand file treeCollapse file tree

1 file changed

+37
-33
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+37
-33
lines changed

‎galleries/users_explain/axes/colorbar_placement.py

Copy file name to clipboardExpand all lines: galleries/users_explain/axes/colorbar_placement.py
+37-33Lines changed: 37 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -143,43 +143,47 @@
143143
# Colorbars attached to fixed-aspect-ratio Axes
144144
# ---------------------------------------------
145145
#
146-
# Placing colorbars for Axes with a fixed aspect ratio pose a particular
147-
# challenge as the parent Axes changes size depending on the data view.
146+
# Axes with a fixed aspect ratio may shrink in height to preserve the aspect
147+
# ratio of the underlying data. This can result in the colorbar becoming taller
148+
# than the associated Axes, as demonstrated in the following example.
148149

149-
fig, axs = plt.subplots(2, 2, layout='constrained')
150-
cmaps = ['RdBu_r', 'viridis']
151-
for col in range(2):
152-
for row in range(2):
153-
ax = axs[row, col]
154-
pcm = ax.pcolormesh(np.random.random((20, 20)) * (col + 1),
155-
cmap=cmaps[col])
156-
if col == 0:
157-
ax.set_aspect(2)
158-
else:
159-
ax.set_aspect(1/2)
160-
if row == 1:
161-
fig.colorbar(pcm, ax=ax, shrink=0.6)
150+
fig, ax = plt.subplots(layout='constrained', figsize=(4, 4))
151+
pcm = ax.imshow(np.random.randn(10, 10), cmap='viridis')
152+
fig.colorbar(pcm, ax=ax)
162153

163154
# %%
164-
# We solve this problem using `.Axes.inset_axes` to locate the Axes in "axes
165-
# coordinates" (see :ref:`transforms_tutorial`). Note that if you zoom in on
166-
# the parent Axes, and thus change the shape of it, the colorbar will also
167-
# change position.
155+
# To automatically adjust the colorbar size to match the parent Axes, we can
156+
# use ``layout='compressed'``. This ensures that as the figure is resized or
157+
# the fixed-aspect-ratio Axes is zoomed in or out, the colorbar dynamically
158+
# resizes to align with the parent Axes.
168159

169-
fig, axs = plt.subplots(2, 2, layout='constrained')
170-
cmaps = ['RdBu_r', 'viridis']
171-
for col in range(2):
172-
for row in range(2):
173-
ax = axs[row, col]
174-
pcm = ax.pcolormesh(np.random.random((20, 20)) * (col + 1),
175-
cmap=cmaps[col])
176-
if col == 0:
177-
ax.set_aspect(2)
178-
else:
179-
ax.set_aspect(1/2)
180-
if row == 1:
181-
cax = ax.inset_axes([1.04, 0.2, 0.05, 0.6])
182-
fig.colorbar(pcm, cax=cax)
160+
fig, ax = plt.subplots(layout='compressed', figsize=(4, 4))
161+
pcm = ax.imshow(np.random.randn(10, 10), cmap='viridis')
162+
ax.set_title("Colorbar with layout='compressed'", fontsize='medium')
163+
fig.colorbar(pcm, ax=ax)
164+
165+
# %%
166+
# Alternatively, we can manually position the colorbar using `.Axes.inset_axes`
167+
# with axes-relative coordinates. This approach provides precise control over
168+
# the colorbar's placement. However, without a layout engine, the colorbar
169+
# might be clipped if it extends beyond the figure boundaries.
170+
171+
fig, ax = plt.subplots(layout='constrained', figsize=(4, 4))
172+
pcm = ax.imshow(np.random.randn(10, 10), cmap='viridis')
173+
cax = ax.inset_axes([1.04, 0.0, 0.05, 1.0]) # Positioning the colorbar
174+
ax.set_title('Colorbar with inset_axes', fontsize='medium')
175+
fig.colorbar(pcm, cax=cax)
176+
177+
# %%
178+
# We can also do this manually using an `.Axes.inset_axes` using axes-relative
179+
# coordinates (see :ref:`transforms_tutorial`). Note that if we do not use a
180+
# layout engine, the colorbar will be clipped off the right side of the figure.
181+
182+
fig, ax = plt.subplots(layout='constrained', figsize=(4, 4))
183+
pcm = ax.imshow(np.random.randn(10, 10), cmap='viridis')
184+
cax = ax.inset_axes([1.04, 0.0, 0.05, 1.0])
185+
ax.set_title('colorbar with inset_axes', fontsize='medium')
186+
fig.colorbar(pcm, cax=cax)
183187

184188
# %%
185189
# .. seealso::

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.