From: John H. <jdh...@ac...> - 2004-10-11 13:33:58
|
>>>>> "Jean-Michel" == Jean-Michel Philippe <jea...@ir...> writes: Jean-Michel> Perfect! This is exactly what I needed for one of my Jean-Michel> apps. 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 Jean-Michel> required... 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) a.plot(t,s) In a complex, nested application or script, it is sometimes nice to have this extra degree of clarity. Hope this helps, JDH |