[IPython-User] what triggers a figure redraw / inline

Fernando Perez fperez.net@gmail....
Thu Feb 23 14:43:14 CST 2012


Hey John,

On Thu, Feb 23, 2012 at 11:11 AM, John Hunter <jdh2358@gmail.com> wrote:
> I am working on a notebook and want to build up a figure in stages to
> illustrate the effect of successive code blocks.  After the first code cell,
> the figure is drawn and inlined, as expected.  After the second, no figure
> is inserted, even if I try and force it to with "draw".  How are you
> deciding whether to insert a figure or not, and is there a way to force the
> figure redraw inline?

The default behavior is to close the figures once they have been
created.  But you have two ways to go about this:

Option #1. Since you're already keeping a reference to your figure (ps
- shame on you for still advertising the god-forsaken .subplot(111)
syntax ;):

> fig = plt.figure(1, figsize=(5.5,5.5))

you can simply in your second cell return the figure as the very last
line of the second cell, or call display() on it.  That is, replace
this:

> plt.draw()

with

fig

or

display(fig)

The difference of the second form is that it will work even if it's
not the last line, where as simply causing the fig repr to trigger a
display only happens if it's the last item.  It also keeps a reference
to the figure since it produces an Out[] cell.


Option #2: you can change the closing behavior of the inline backend,
either for this notebook:

%config InlineBackend.close_figures = False

or permanently in your config file.  At that point, figures remain
open and you're responsible for manually closing them, but this lets
you build a figure incrementally cell after cell.  You can then
display it at the end either with display() or force all figures to
show with plt.show() at the end of a cell, just as if it was a script.


> BTW< I am using ipython from git HEAD and the new UI is *fantastic*.  Very
> nice work, and very exciting!

Yes, it's looking great.  If it weren't for the Strata/pydata/pycon
madness we might have been able to push a formal 0.13 release already
with all that, but it will need to wait a few weeks.

Cheers,

f


More information about the IPython-User mailing list