|
From: John H. <jdh...@ac...> - 2004-12-21 19:29:20
|
>>>>> "Michel" == Michel Sanner <sa...@sc...> writes:
Michel> Hello, I finally got around to play with matplotlib and
Michel> try to create node for using it within Vision (my visual
Michel> programming environemnt).
Hi Michel,
It's excellent to hear that you are trying to incorporate matplotlib!
Only good things can come of stress testing matplotlib in such a
sophisticated environment.
Michel> I was wondering if there is a way the clear the area used
Michel> by a given subplot. cla() seesm the clear the data, but
Michel> the axis and background remain. The reason I am asking is
Michel> that I envisioned that in my networks I would like to be
Michel> able to create a Figure using one node and then have say a
Michel> Histogram node be placed in a subplot and a scatter plot
Michel> in another subplot (in the same figure). Now if the
Michel> Histogram node has a subplot parameter which can be
Michel> modified by the user to move this particular graph to
Michel> another location in the picture I need to get ride of what
Michel> I drew in the previous location, but since parts of the
Michel> figure might be generated by other nodes in the network I
Michel> would not want to clear the whole figure.
I see what you are trying to do and there is no support in the current
release for this. However, it will be mostly trivial to add, and
definitely useful, so I can quickly put it in for the next release.
Before doing so, it would help for me to know if you are using the OO
interface (eg examples/embedding_in_tk.py) or the pylab (formerly
matplotlib.matlab). The latter does a fair amount of magic under the
scenes managing the current figure and axes and so is not the best for
embedding in an application. It thus requires more work to delete an
axes, since there is a separate figure/axes management layer.
Do you envision providing a scripting interface to your Vision users,
in which case the pylab interface probably makes sense, or will you
ultimately be maintaining control over the creation of figure windows
and axes and providing a GUI layer to your users, in which case the OO
embedded approach makes sense.
Note that if all you want to do is move the subplot in a figure, all
you need to do is call
ax = subplot(211)
ax.set_position((left,bottom,width,height))
where l,b,w,h are fractions of the figure width and height. If you
want to drag and drop axes from one figure to another, which is
reasonable, then additional work will need to be done to remove the
axes from one and add to another. Sharing a subplot in two figures
will probably remain unsupported, but with a little work you could
move one from one figure to another. Note that
matplotlib.axes.Subplot is a special case of matplotlib.axes.Axes, and
each are placed with l,b,w,h. The difference is that subplot does the
l,b,w,h computation for you -- see examples/axes_demo.py.
On an related note, the ticklabels in your screenshot appeared a
little crowded. You may want to take a look at
http://matplotlib.sourceforge.net/faq.html#TEXTOVERLAP .
Michel> Another question was whether it is possible to find out
Michel> the figure number from the figure handle ? If I pass the
Michel> Figure instance between nodes to tell drawing node in
Michel> which figure to place their graphical output I need a way
Michel> to active the figure that comes as an input. Currently I
Michel> add a number attribute to the figure when I create it in
Michel> the figure node.
The Figure class doesn't have a concept of number, but the
FigureManager does. In the pylab interface, calls to make a new
figure create a new FigureManager (abstract class in
backend_bases.FigureManager, concrete classes in the various
matplotlib/backends/backend_something.py). The figure manager has a
few public attributes you can access
manager = get_current_fig_manager()
manager.num # what you are after
manager.canvas # a backend_bases.FigureCanvasBase concrete impl
manager.window # the GUI window, eg tk.Window
As I alluded to above though, depending on your ultimate goals, once
you get past the playing stage you *may* want to forgo the pylab
interface (which the figure manager is designed for) in exchange for
the control of the OO interface. Note that a new
examples/embedding_in_tk2.py was recently added to CVS which shows how
to use tk matplotlib with the default toolbar in a tk app.
There is an unreleased users guide in progress, and it has some more
details and schematics on how matplotlib is organized.
http://cvs.sourceforge.net/viewcvs.py/*checkout*/matplotlib/users_guide/users_guide.pdf?rev=1.3
Michel> Thanks for any input .. and congratualtion on the very
Michel> nice package !
High praise coming from you! Thanks.
JDH
|