Jean-Michel> Perfect! This is exactly what I needed for one of my
Glad that worked for you.
>> But if you really want full control with no magic globals, I
>> suggest using the matplotlib API rather than the matlab
>> interface. Here is a minimal example with the SVG backend to
>> create a figure w/o the matlab interface
Jean-Michel> Well, what do you exactly mean by full control? The
Jean-Michel> fact that the figure is no more controlled by
Jean-Michel> matplotlib.matlab (as matlab does) but under my own
Jean-Michel> control? So that the application is now fully
Jean-Michel> responsible for displaying it?
Jean-Michel> NB: currently I'm targeting TkAgg.
What I mean is that is that if you want to explicitly control when
your figure windows are shown, you need to use the matplotlib API, and
example of which for tkagg is at
http://matplotlib.sf.net/examples/embedding_in_tk.py. In this case,
you explicitly make the calls to show or hide your window when you
want. If you use the matlab interface, you are constrained either to
1) if interactive is False, show all of your figures at the end of the
script when you call show or 2) if interactive is True, show all your
windows at the time of their creation.
Actually, you may have a 3rd (untested, unsupported) option with the
matlab interface. Thanks to the changes Fernando and I introduced to
support ipython, I believe as of matplotlib 0.62 it is safe to call
show repeatedly without blocking script execution. You may want to
test this and report back.
Jean-Michel> I'm afraid I don't understand why this should remove
Jean-Michel> "magic" globals, I feel some globals are still
Some people do not like to use the matlab interface because it manages
the current figure and axes for them, behind the scenes. Eg when you
type plot(x,y), the plot command is sent to the current figure and
axes, as in matlab, which are stored as "global" (actually module
level) variables in matplotlib.matlab. In the matplotlib API, you
have to explicitly instantiate the figure and axes, and direct your
plotting, saving, etc commands to these instances, as in
from matplotlib.numerix import arange, sin, pi
from matplotlib.figure import Figure
f = Figure(figsize=(5,4), dpi=100)
a = f.add_subplot(111)
t = arange(0.0,3.0,0.01)
s = sin(2*pi*t)
In a complex, nested application or script, it is sometimes nice to
have this extra degree of clarity.
Hope this helps,