Movatterモバイル変換


[0]ホーム

URL:


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

Sign up
Appearance settings

Commitfdf1f25

Browse files
jklymakrcomer
andcommitted
DOC: add a couple more placement examples, crosslink axes_grid [ci doc]
Co-authored-by: Ruth Comer <10599679+rcomer@users.noreply.github.com>
1 parent7d2acfd commitfdf1f25

File tree

4 files changed

+118
-16
lines changed

4 files changed

+118
-16
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
importmatplotlib.pyplotasplt

‎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-
colorbarsusing `~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
importmatplotlib.pyplotasplt

‎galleries/users_explain/axes/colorbar_placement.py

Lines changed: 102 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,11 @@
1010
Colorbars indicate the quantitative extent of image data. Placing in
1111
a figure is non-trivial because room needs to be made for them.
1212
13-
The simplest case is just attaching a colorbar to each axes:
13+
Automatic placement of colorbars
14+
================================
15+
16+
The simplest case is just attaching a colorbar to each axes. Note in this
17+
example that the colorbars steal some space from the parent axes.
1418
"""
1519
importmatplotlib.pyplotasplt
1620
importnumpyasnp
@@ -28,9 +32,9 @@
2832
fig.colorbar(pcm,ax=ax)
2933

3034
# %%
31-
# The first column has the same type of data in both rows, so it may
32-
#bedesirable tocombine thecolorbar which wedo bycalling
33-
#`.Figure.colorbar` witha list of axesinstead of a single axes.
35+
# The first column has the same type of data in both rows, so it may be
36+
# desirable tohave just onecolorbar. Wedothisbypassing `.Figure.colorbar`
37+
# a list of axeswith the *ax* kwarg.
3438

3539
fig,axs=plt.subplots(2,2)
3640
cmaps= ['RdBu_r','viridis']
@@ -41,6 +45,27 @@
4145
cmap=cmaps[col])
4246
fig.colorbar(pcm,ax=axs[:,col],shrink=0.6)
4347

48+
# %%
49+
# The stolen space can lead to axes in the same subplot layout
50+
# being different sizes, which is often undesired if the the
51+
# x-axis on each plot is meant to be comparable as in the following:
52+
53+
fig,axs=plt.subplots(2,1,figsize=(4,5),sharex=True)
54+
X=np.random.randn(20,20)
55+
axs[0].plot(np.sum(X,axis=0))
56+
axs[1].pcolormesh(X)
57+
fig.colorbar(pcm,ax=axs[1],shrink=0.6)
58+
59+
# %%
60+
# This is usually undesired, and can be worked around in various ways, e.g.
61+
# adding a colorbar to the other axes and then removing it. However, the most
62+
# straightforward is to use :ref:`constrained layout <constrainedlayout_guide>`:
63+
64+
fig,axs=plt.subplots(2,1,figsize=(4,5),sharex=True,layout='constrained')
65+
axs[0].plot(np.sum(X,axis=0))
66+
axs[1].pcolormesh(X)
67+
fig.colorbar(pcm,ax=axs[1],shrink=0.6)
68+
4469
# %%
4570
# Relatively complicated colorbar layouts are possible using this
4671
# paradigm. Note that this example works far better with
@@ -56,8 +81,74 @@
5681
fig.colorbar(pcm,ax=[axs[2,1]],location='left')
5782

5883
# %%
59-
# Colorbars with fixed-aspect-ratio axes
60-
# ======================================
84+
# Adjusting the spacing between colorbars and parent axes
85+
# =======================================================
86+
#
87+
# The distance a colorbar is from the parent axes can be adjusted with the
88+
# *pad* keyword argument. This is in units of fraction of the parent axes
89+
# width, and the default for a vertical axes is 0.05 (or 0.15 for a horizontal
90+
# axes).
91+
92+
fig,axs=plt.subplots(3,1,layout='constrained',figsize=(5,5))
93+
forax,padinzip(axs, [0.025,0.05,0.1]):
94+
pcm=ax.pcolormesh(np.random.randn(20,20),cmap='viridis')
95+
fig.colorbar(pcm,ax=ax,pad=pad,label=f'pad:{pad}')
96+
fig.suptitle("layout='constrained'")
97+
98+
# %%
99+
# Note that if you do not use constrained layout, the pad command makes the
100+
# parent axes shrink:
101+
102+
fig,axs=plt.subplots(3,1,figsize=(5,5))
103+
forax,padinzip(axs, [0.025,0.05,0.1]):
104+
pcm=ax.pcolormesh(np.random.randn(20,20),cmap='viridis')
105+
fig.colorbar(pcm,ax=ax,pad=pad,label=f'pad:{pad}')
106+
fig.suptitle("No layout manager")
107+
108+
# %%
109+
# Manual placement of colorbars
110+
# =============================
111+
#
112+
# Sometimes the automatic placement provided by ``colorbar`` does not
113+
# give the desired effect. We can manually create an axes and tell
114+
# ``colorbar`` to use that axes by passing the axes to the *cax* keyword
115+
# argument.
116+
#
117+
# Using ``inset_axes``
118+
# --------------------
119+
#
120+
# We can manually create any type of axes for the colorbar to use, but an
121+
# `.Axes.inset_axes` is useful because it is a child of the parent axes and can
122+
# be positioned relative to the parent. Here we add a colorbar centered near
123+
# the bottom of the parent axes.
124+
125+
fig,ax=plt.subplots(layout='constrained',figsize=(4,4))
126+
pcm=ax.pcolormesh(np.random.randn(20,20),cmap='viridis')
127+
ax.set_ylim([-4,20])
128+
cax=ax.inset_axes([0.3,0.07,0.4,0.04])
129+
fig.colorbar(pcm,cax=cax,orientation='horizontal')
130+
131+
# %%
132+
# `.Axes.inset_axes` can also specify its position in data coordinates
133+
# using the *transform* keyword argument if you want your axes at a
134+
# certain data position on the graph:
135+
136+
fig,ax=plt.subplots(layout='constrained',figsize=(4,4))
137+
pcm=ax.pcolormesh(np.random.randn(20,20),cmap='viridis')
138+
ax.set_ylim([-4,20])
139+
cax=ax.inset_axes([7.5,-1.7,5,1.2],transform=ax.transData)
140+
fig.colorbar(pcm,cax=cax,orientation='horizontal')
141+
142+
# %%
143+
# .. seealso::
144+
#
145+
# :ref:`axes_grid` has methods for creating colorbar axes as well:
146+
#
147+
# - :ref:`demo-colorbar-with-inset-locator`
148+
# - :ref:`demo-colorbar-with-axes-divider`
149+
#
150+
# Colorbars attached to fixed-aspect-ratio axes
151+
# ---------------------------------------------
61152
#
62153
# Placing colorbars for axes with a fixed aspect ratio pose a particular
63154
# challenge as the parent axes changes size depending on the data view.
@@ -77,9 +168,10 @@
77168
fig.colorbar(pcm,ax=ax,shrink=0.6)
78169

79170
# %%
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
82-
# change the shape of the axes, the colorbar will also change position.
171+
# We solve this problem using `.Axes.inset_axes` to locate the axes in "axes
172+
# coordinates" (see :ref:`transforms_tutorial`). Note that if you zoom in on
173+
# the axes, and thus change the shape of the axes, the colorbar will also
174+
# change position.
83175

84176
fig,axs=plt.subplots(2,2,layout='constrained')
85177
cmaps= ['RdBu_r','viridis']
@@ -94,6 +186,4 @@
94186
ax.set_aspect(1/2)
95187
ifrow==1:
96188
cax=ax.inset_axes([1.04,0.2,0.05,0.6])
97-
fig.colorbar(pcm,ax=ax,cax=cax)
98-
99-
plt.show()
189+
fig.colorbar(pcm,cax=cax)

‎galleries/users_explain/axes/constrainedlayout_guide.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
55
.. _constrainedlayout_guide:
66
7-
================================
7+
========================
88
Constrained Layout Guide
9-
================================
9+
========================
1010
1111
Use *constrained layout* to fit plots within your figure cleanly.
1212

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp