8000 Merge pull request #10629 from jklymak/fix-enh-colorbar-constrainedla… · matplotlib/matplotlib@e54939a · GitHub
[go: up one dir, main page]

Skip to content

Commit e54939a

Browse files
authored
Merge pull request #10629 from jklymak/fix-enh-colorbar-constrainedlayout
FIX/ENH CL: Allow single parent colorbar w/ gridspec layout
2 parents 072dd2b + acc4e17 commit e54939a

File tree

2 files changed

+29
-4
lines changed

2 files changed

+29
-4
lines changed

lib/matplotlib/colorbar.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1124,6 +1124,7 @@ def make_axes(parents, location=None, orientation=None, fraction=0.15,
11241124
anchor = kw.pop('anchor', loc_settings['anchor'])
11251125
parent_anchor = kw.pop('panchor', loc_settings['panchor'])
11261126

1127+
parents_iterable = cbook.iterable(parents)
11271128
# turn parents into a list if it is not already. We do this w/ np
11281129
# because `plt.subplots` can return an ndarray and is natural to
11291130
# pass to `colorbar`.
@@ -1191,7 +1192,7 @@ def make_axes(parents, location=None, orientation=None, fraction=0.15,
11911192
# and we need to set the aspect ratio by hand...
11921193
cax.set_aspect(aspect, anchor=anchor, adjustable='box')
11931194
else:
1194-
if len(parents) == 1:
1195+
if not parents_iterable:
11951196
# this is a single axis...
11961197
ax = parents[0]
11971198
lb, lbpos = constrained_layout.layoutcolorbarsingle(

tutorials/intermediate/constrainedlayout_guide.py

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -105,15 +105,39 @@ def example_plot(ax, fontsize=12, nodec=False):
105105
fig.colorbar(im, ax=ax, shrink=0.6)
106106

107107
############################################################################
108-
# If you specify multiple axes to the ``ax`` argument of ``colorbar``,
109-
# constrained_layout will take space from all axes that share the same
110-
# gridspec.
108+
# If you specify a list of axes (or other iterable container) to the
109+
# ``ax`` argument of ``colorbar``, constrained_layout will take space from all # axes that share the same gridspec.
111110

112111
fig, axs = plt.subplots(2, 2, figsize=(4, 4), constrained_layout=True)
113112
for ax in axs.flatten():
114113
im = ax.pcolormesh(arr, rasterized=True)
115114
fig.colorbar(im, ax=axs, shrink=0.6)
116115

116+
############################################################################
117+
# Note that there is a bit of a subtlety when specifying a single axes
118+
# as the parent. In the following, it might be desirable and expected
119+
# for the colorbars to line up, but they don't because the colorbar paired
120+
# with the bottom axes is tied to the subplotspec of the axes, and hence
121+
# shrinks when the gridspec-level colorbar is added.
122+
123+
fig, axs = plt.subplots(3, 1, figsize=(4, 4), constrained_layout=True)
124+
for ax in axs[:2]:
125+
im = ax.pcolormesh(arr, rasterized=True)
126+
fig.colorbar(im, ax=axs[:2], shrink=0.6)
127+
im = axs[2].pcolormesh(arr, rasterized=True)
128+
fig.colorbar(im, ax=axs[2], shrink=0.6)
129+
130+
############################################################################
131+
# The API to make a single-axes behave like a list of axes is to specify
132+
# it as a list (or other iterable container), as below:
133+
134+
fig, axs = plt.subplots(3, 1, figsize=(4, 4), constrained_layout=True)
135+
for ax in axs[:2]:
136+
im = ax.pcolormesh(arr, rasterized=True)
137+
fig.colorbar(im, ax=axs[:2], shrink=0.6)
138+
im = axs[2].pcolormesh(arr, rasterized=True)
139+
fig.colorbar(im, ax=[axs[2]], shrink=0.6)
140+
117141
####################################################
118142
# Suptitle
119143
# =========

0 commit comments

Comments
 (0)
0