Skip to content

Commit 8e6a3e5

Browse files
committed
Support SubFigures in AxesDivider.
1 parent cb756d3 commit 8e6a3e5

File tree

4 files changed

+30
-29
lines changed

4 files changed

+30
-29
lines changed

examples/axes_grid1/simple_axes_divider1.py

+18-19
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
=====================
33
Simple Axes Divider 1
44
=====================
5+
6+
See also :doc:`/tutorials/toolkits/axes_grid`.
57
"""
68

79
from mpl_toolkits.axes_grid1 import Size, Divider
@@ -16,51 +18,48 @@ def label_axes(ax, text):
1618
left=False, labelleft=False)
1719

1820

19-
##############################################################################
20-
# Fixed axes sizes; fixed paddings.
21+
fig = plt.figure(figsize=(12, 6))
22+
sfs = fig.subfigures(1, 2)
2123

22-
fig = plt.figure(figsize=(6, 6))
23-
fig.suptitle("Fixed axes sizes, fixed paddings")
2424

25+
sfs[0].suptitle("Fixed axes sizes, fixed paddings")
2526
# Sizes are in inches.
2627
horiz = [Size.Fixed(1.), Size.Fixed(.5), Size.Fixed(1.5), Size.Fixed(.5)]
2728
vert = [Size.Fixed(1.5), Size.Fixed(.5), Size.Fixed(1.)]
2829

2930
rect = (0.1, 0.1, 0.8, 0.8)
3031
# Divide the axes rectangle into a grid with sizes specified by horiz * vert.
31-
divider = Divider(fig, rect, horiz, vert, aspect=False)
32+
div = Divider(sfs[0], rect, horiz, vert, aspect=False)
3233

3334
# The rect parameter will actually be ignored and overridden by axes_locator.
34-
ax1 = fig.add_axes(rect, axes_locator=divider.new_locator(nx=0, ny=0))
35+
ax1 = sfs[0].add_axes(rect, axes_locator=div.new_locator(nx=0, ny=0))
3536
label_axes(ax1, "nx=0, ny=0")
36-
ax2 = fig.add_axes(rect, axes_locator=divider.new_locator(nx=0, ny=2))
37+
ax2 = sfs[0].add_axes(rect, axes_locator=div.new_locator(nx=0, ny=2))
3738
label_axes(ax2, "nx=0, ny=2")
38-
ax3 = fig.add_axes(rect, axes_locator=divider.new_locator(nx=2, ny=2))
39+
ax3 = sfs[0].add_axes(rect, axes_locator=div.new_locator(nx=2, ny=2))
3940
label_axes(ax3, "nx=2, ny=2")
40-
ax4 = fig.add_axes(rect, axes_locator=divider.new_locator(nx=2, nx1=4, ny=0))
41+
ax4 = sfs[0].add_axes(rect, axes_locator=div.new_locator(nx=2, nx1=4, ny=0))
4142
label_axes(ax4, "nx=2, nx1=4, ny=0")
4243

43-
##############################################################################
44-
# Axes sizes that scale with the figure size; fixed paddings.
45-
46-
fig = plt.figure(figsize=(6, 6))
47-
fig.suptitle("Scalable axes sizes, fixed paddings")
4844

45+
sfs[1].suptitle("Scalable axes sizes, fixed paddings")
46+
# Fixed sizes are in inches, scaled sizes are relative.
4947
horiz = [Size.Scaled(1.5), Size.Fixed(.5), Size.Scaled(1.), Size.Scaled(.5)]
5048
vert = [Size.Scaled(1.), Size.Fixed(.5), Size.Scaled(1.5)]
5149

5250
rect = (0.1, 0.1, 0.8, 0.8)
5351
# Divide the axes rectangle into a grid with sizes specified by horiz * vert.
54-
divider = Divider(fig, rect, horiz, vert, aspect=False)
52+
div = Divider(sfs[1], rect, horiz, vert, aspect=False)
5553

5654
# The rect parameter will actually be ignored and overridden by axes_locator.
57-
ax1 = fig.add_axes(rect, axes_locator=divider.new_locator(nx=0, ny=0))
55+
ax1 = sfs[1].add_axes(rect, axes_locator=div.new_locator(nx=0, ny=0))
5856
label_axes(ax1, "nx=0, ny=0")
59-
ax2 = fig.add_axes(rect, axes_locator=divider.new_locator(nx=0, ny=2))
57+
ax2 = sfs[1].add_axes(rect, axes_locator=div.new_locator(nx=0, ny=2))
6058
label_axes(ax2, "nx=0, ny=2")
61-
ax3 = fig.add_axes(rect, axes_locator=divider.new_locator(nx=2, ny=2))
59+
ax3 = sfs[1].add_axes(rect, axes_locator=div.new_locator(nx=2, ny=2))
6260
label_axes(ax3, "nx=2, ny=2")
63-
ax4 = fig.add_axes(rect, axes_locator=divider.new_locator(nx=2, nx1=4, ny=0))
61+
ax4 = sfs[1].add_axes(rect, axes_locator=div.new_locator(nx=2, nx1=4, ny=0))
6462
label_axes(ax4, "nx=2, nx1=4, ny=0")
6563

64+
6665
plt.show()

examples/axes_grid1/simple_axes_divider3.py

+2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
Simple Axes Divider 3
44
=====================
55
6+
See also :doc:`/tutorials/toolkits/axes_grid`.
67
"""
8+
79
import mpl_toolkits.axes_grid1.axes_size as Size
810
from mpl_toolkits.axes_grid1 import Divider
911
import matplotlib.pyplot as plt

lib/mpl_toolkits/axes_grid1/axes_divider.py

+9-9
Original file line numberDiff line numberDiff line change
@@ -188,21 +188,21 @@ def locate(self, nx, ny, nx1=None, ny1=None, axes=None, renderer=None):
188188
renderer
189189
"""
190190

191-
figW, figH = self._fig.get_size_inches()
191+
fig_w, fig_h = self._fig.bbox.size / self._fig.dpi
192192
x, y, w, h = self.get_position_runtime(axes, renderer)
193193

194194
hsizes = self.get_horizontal_sizes(renderer)
195195
vsizes = self.get_vertical_sizes(renderer)
196-
k_h = self._calc_k(hsizes, figW*w)
197-
k_v = self._calc_k(vsizes, figH*h)
196+
k_h = self._calc_k(hsizes, fig_w * w)
197+
k_v = self._calc_k(vsizes, fig_h * h)
198198

199199
if self.get_aspect():
200200
k = min(k_h, k_v)
201201
ox = self._calc_offsets(hsizes, k)
202202
oy = self._calc_offsets(vsizes, k)
203203

204-
ww = (ox[-1] - ox[0]) / figW
205-
hh = (oy[-1] - oy[0]) / figH
204+
ww = (ox[-1] - ox[0]) / fig_w
205+
hh = (oy[-1] - oy[0]) / fig_h
206206
pb = mtransforms.Bbox.from_bounds(x, y, w, h)
207207
pb1 = mtransforms.Bbox.from_bounds(x, y, ww, hh)
208208
pb1_anchored = pb1.anchored(self.get_anchor(), pb)
@@ -218,8 +218,8 @@ def locate(self, nx, ny, nx1=None, ny1=None, axes=None, renderer=None):
218218
if ny1 is None:
219219
ny1 = ny + 1
220220

221-
x1, w1 = x0 + ox[nx] / figW, (ox[nx1] - ox[nx]) / figW
222-
y1, h1 = y0 + oy[ny] / figH, (oy[ny1] - oy[ny]) / figH
221+
x1, w1 = x0 + ox[nx] / fig_w, (ox[nx1] - ox[nx]) / fig_w
222+
y1, h1 = y0 + oy[ny] / fig_h, (oy[ny1] - oy[ny]) / fig_h
223223

224224
return mtransforms.Bbox.from_bounds(x1, y1, w1, h1)
225225

@@ -649,7 +649,7 @@ def new_locator(self, nx, nx1=None):
649649

650650
def locate(self, nx, ny, nx1=None, ny1=None, axes=None, renderer=None):
651651
# docstring inherited
652-
fig_w, fig_h = self._fig.get_size_inches()
652+
fig_w, fig_h = self._fig.bbox.size / self._fig.dpi
653653
x, y, w, h = self.get_position_runtime(axes, renderer)
654654
summed_ws = self.get_horizontal_sizes(renderer)
655655
equal_hs = self.get_vertical_sizes(renderer)
@@ -684,7 +684,7 @@ def new_locator(self, ny, ny1=None):
684684

685685
def locate(self, nx, ny, nx1=None, ny1=None, axes=None, renderer=None):
686686
# docstring inherited
687-
fig_w, fig_h = self._fig.get_size_inches()
687+
fig_w, fig_h = self._fig.bbox.size / self._fig.dpi
688688
x, y, w, h = self.get_position_runtime(axes, renderer)
689689
summed_hs = self.get_vertical_sizes(renderer)
690690
equal_ws = self.get_horizontal_sizes(renderer)

tutorials/toolkits/axes_grid.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@
331331
332332
See the example,
333333
334-
.. figure:: ../../gallery/axes_grid1/images/sphx_glr_simple_axes_divider1_002.png
334+
.. figure:: ../../gallery/axes_grid1/images/sphx_glr_simple_axes_divider1_001.png
335335
:target: ../../gallery/axes_grid1/simple_axes_divider1.html
336336
:align: center
337337
:scale: 50

0 commit comments

Comments
 (0)