Gf B, on 2011-01-04 12:31, wrote: > On Mon, Jan 3, 2011 at 3:53 PM, Paul Ivanov <[email protected]> wrote: > Gf B, on 2011-01-03 15:23, wrote: > > > Can such a "grid of grids" be done with matplotlib? If so, could someone > > > show me how? > > > > You'll be able to group the inner grids visually by adjusting the > > spacing. As far as getting the spines to only outline the outer > > grid, and not the inner grid - I think you'll have to do it > > manually by hiding the appropriate spines for the inner subplots. > > > > This sort of ad-hoc manual tweaking is what I was hoping to avoid. > > What would it take to implement a "true" grid-of-grids function in > matplotlib? What I mean by this is a function that can arrange in a grid > not only plots but also other grids. (Is this a question for the devel > group?)
I think the true grid-of-grids functunality is already
implemented. Here's a replication of your Mathematica plots:
------------
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from itertools import product
def squiggle_xy(a, b, c, d, i=np.linspace(0.0, 2*np.pi, 200)):
return np.sin(i*a)*np.cos(i*b), np.sin(i*c)*np.cos(i*d)
f = plt.figure(figsize=(8, 8))
# gridspec inside gridspec
outer_grid = gridspec.GridSpec(4, 4, wspace=0.0, hspace=0.0)
for i in xrange(16):
inner_grid = gridspec.GridSpecFromSubplotSpec(3, 3,
subplot_spec=outer_grid[i], wspace=0.0, hspace=0.0)
a, b = int(i/4)+1,i%4+1
for j, (c, d) in enumerate(product(range(1, 4), repeat=2)):
ax = plt.Subplot(f, inner_grid[j])
ax.plot(*squiggle_xy(a, b, c, d))
ax.set_xticks([])
ax.set_yticks([])
f.add_subplot(ax)
all_axes = f.get_axes()
#show only the outside spines
for ax in all_axes:
for sp in ax.spines.values():
sp.set_visible(False)
if ax.is_first_row():
ax.spines['top'].set_visible(True)
if ax.is_last_row():
ax.spines['bottom'].set_visible(True)
if ax.is_first_col():
ax.spines['left'].set_visible(True)
if ax.is_last_col():
ax.spines['right'].set_visible(True)
plt.show()
------------
It's a matter of taste, but I think you can get away hiding all
spines, and just setting the hspace and wspace for the outer_grid
to some small value (this is what I meant by 'adjusting the
spacing').
I'll send a patch to the devel list shortly adding this example
with the following documentation
A Complex Nested GridSpec using SubplotSpec
===========================================
Here's a more sophisticated example of nested gridspect where we put
a box around outer 4x4 grid, by hiding appropriate spines in each of the
inner 3x3 grids.
it'll be placed on the gridspec page, after this section:
http://matplotlib.sourceforge.net/users/gridspec.html#gridspec-using-subplotspec
best,
--
Paul Ivanov
314 address only used for lists, off-list direct email at:
http://pirsquared.org | GPG/PGP key id: 0x0F3E28F7
signature.asc
Description: Digital signature
------------------------------------------------------------------------------ Learn how Oracle Real Application Clusters (RAC) One Node allows customers to consolidate database storage, standardize their database environment, and, should the need arise, upgrade to a full multi-node Oracle RAC database without downtime or disruption http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________ Matplotlib-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/matplotlib-users
