feature discussion/request: a 'layout' command for matplotlib

hi all,

i am a *huge fan* of matplotlib and use it for all plotting. one
feature that i would find extremely useful that i believe is missing
(but am very open to being corrected in case i overlooked something)
is a way to define the layout of complex subplots. by this i mean
something like R's "layout" command, which allows you to nearly
arbitrarily arrange the subplots of a figure. this command is much
more general than "subplot" since it does not restrict you to square
arrangements of figure subplots.

for examples, check out these figures/examples:

1. source code of complex layout:
http://rgraphics.limnology.wisc.edu/rmargins_layout.php
    (the associated graph it produces is here:
http://rgraphics.limnology.wisc.edu/images/layouts/rmargins_layout_thumb.png)

2. a tutorial on complex layouts with this command:
http://www.statmethods.net/advgraphs/layout.html
    in particular, see:
http://www.statmethods.net/advgraphs/images/layout3a.png where a
complex layout which is currently not possible with "subplot" is made.

a command like R's layout would be a tremendously helpful addition to
matplotlib, in my opinion. it will prevent the need for annoying
manual "postprocessing" of figures into these layouts using tools like
Illustrator, since these figures could be generated programmatically
instead, which much more precision.

as far as i know, this cannot be done in matplotlib right now, without
plotting your own axes (using some combination of axes grid toolkit
and raw axes plotting.)

if anyone out there has written some kind of wrappers that do
something like the "layout" command, i would love to know about it. if
it's still in testing and not part of the current matplotlib, i'd be
more than happy to beta test this for anyone and try it on many
examples.

thanks very much for your help.

per freem wrote:

hi all,

i am a *huge fan* of matplotlib and use it for all plotting. one
feature that i would find extremely useful that i believe is missing
(but am very open to being corrected in case i overlooked something)
is a way to define the layout of complex subplots. by this i mean
something like R's "layout" command, which allows you to nearly
arbitrarily arrange the subplots of a figure. this command is much
more general than "subplot" since it does not restrict you to square
arrangements of figure subplots.

for examples, check out these figures/examples:

1. source code of complex layout:
http://rgraphics.limnology.wisc.edu/rmargins_layout.php
    (the associated graph it produces is here:
http://rgraphics.limnology.wisc.edu/images/layouts/rmargins_layout_thumb.png)

2. a tutorial on complex layouts with this command:
http://www.statmethods.net/advgraphs/layout.html
    in particular, see:
http://www.statmethods.net/advgraphs/images/layout3a.png where a
complex layout which is currently not possible with "subplot" is made.

a command like R's layout would be a tremendously helpful addition to
matplotlib, in my opinion. it will prevent the need for annoying
manual "postprocessing" of figures into these layouts using tools like
Illustrator, since these figures could be generated programmatically
instead, which much more precision.

as far as i know, this cannot be done in matplotlib right now, without
plotting your own axes (using some combination of axes grid toolkit
and raw axes plotting.)

if anyone out there has written some kind of wrappers that do
something like the "layout" command, i would love to know about it. if
it's still in testing and not part of the current matplotlib, i'd be
more than happy to beta test this for anyone and try it on many
examples.
  

Hi Per,

I wrote two things that may be of interest to you.

This first is mplsizer, based on the wx layout model, and works "live"
(with a figure open in a GUI) as well as for saving to disk. See the
demo directory for, well, some demos. I haven't been using this too much
lately, but it still works as well as it ever did AFAIK. There is a
trivial bit of documentation and a copy of the source at
http://github.com/astraw/mplsizer

The second is svg_stack. This is used as a post-processing step that
requires saving my figures as svg files and then composing them with
this tool. There is some minimal documentation and the source at
http://github.com/astraw/svg_stack . The nice thing with svg_stack is
that you can use svg files from other sources (i.e. not just
matplotlib). Also, everything can be manually adjusted in Inkscape,
which itself has nice command-line export to .png and .pdf capabilities.

-Andrew

Any interest in merging this in as an mpl_toolkit?

Gaël

···

On Sun, Jan 10, 2010 at 07:32:27AM -0800, Andrew Straw wrote:

This first is mplsizer, based on the wx layout model, and works "live"
(with a figure open in a GUI) as well as for saving to disk. See the
demo directory for, well, some demos. I haven't been using this too much
lately, but it still works as well as it ever did AFAIK. There is a
trivial bit of documentation and a copy of the source at
http://github.com/astraw/mplsizer

Gael Varoquaux wrote:

···

On Sun, Jan 10, 2010 at 07:32:27AM -0800, Andrew Straw wrote:
  

This first is mplsizer, based on the wx layout model, and works "live"
(with a figure open in a GUI) as well as for saving to disk. See the
demo directory for, well, some demos. I haven't been using this too much
lately, but it still works as well as it ever did AFAIK. There is a
trivial bit of documentation and a copy of the source at
http://github.com/astraw/mplsizer
    
Any interest in merging this in as an mpl_toolkit?

It already is. :slight_smile: Any interest in writing docs and advertising it?

> Any interest in merging this in as an mpl_toolkit?

It already is. :slight_smile:

Me dig hole and hide.

Any interest in writing docs and advertising it?

Well, first I'll use it :). I can advertise if I and up using it a lot.

Gaël

···

On Sun, Jan 10, 2010 at 07:54:18AM -0800, Andrew Straw wrote: