save or pickle figure object

Hi Sebastien,

Sorry, I had forgotten about that. I've taken a look at the code that we have ... and it doesn't separate out nearly as much as I had thought. The code that rebuilds the plots is actually pretty complicated and messy ... not so much from a conceptual point of view but in how it was implemented. Plus, our data structure and corresponding plot structure is very nested: we have a the concept of series in series groups, which are on plots, which are in plot groups, and so on up to a few levels of grouping. Additionally, our plots allow for up to 4 'y' axes and 2 'x' axes, making the code seem more complicated than it is.

When we want to store the plots, we pickle the top object (which we call our plot manager) and because of the tree-like data structure, it pickles everything right down to the data in the series. We've been very careful to ensure that there are no mpl objects referenced in the data structure.

When we unpickle the plot manager, we walk our way through the tree, calling plotPanel.addPlot(...) and plotPanel.addSeries(...) as we go. In this case, plotPanel is a class that is a wx.Frame (well, an MDI frame in our case) that has a mpl figure on it, and various methods that know how to manipulate the data from our Plot and Series objects to create appropriate mpl analogues. This is strictly a one-way operation: we always build plots and series from our own objects and any modifications occur on our objects and not on the mpl lines/figures/etc. That is, if we want to change a series colour for example, the code modifies our Series object and it emits a pubsub message that causes the plotPanel to update itself based on what's in the Series object ... we never manipulate the mpl line directly.

At any rate, I've attached some code to this email which illustrates what I was talking about, but it's not runnable and it references other files which I haven't included. Still you should be able to get the idea.

Hope this helps,
Anthony.

plot_manager_data_classes.py (36.7 KB)

···

-----Original Message-----
From: Sebastien Binet [mailto:binet@…1758…]
Sent: October 8, 2008 9:47 PM
To: Anthony Floyd
Cc: Anthony Floyd
Subject: Re: [Matplotlib-users] save or pickle figure object

Hi Anthony,

On Tuesday 16 September 2008 20:30:26 Anthony Floyd wrote:
> On Tue, Sep 16, 2008 at 8:17 PM, Sebastien Binet > > > > <hep.sebastien.binet@...287...> wrote:
> > Hi Anthony,
> >
> >> As you've already been told, you can't pickle/shelve mpl
objects. Our
> >> solution to this is to have a native python shadow object that
> >> contains all the bits and pieces needed to create a
figure, and always
> >> build the plots from these shadow objects. This gives us the
> >> advantage of being able to shelve the shadow objects and
rebuild the
> >> figures later.
> >
> > this is rather interesting !
> > any code to point to ?
>
> Hi Sebastien,
>
> I'll see what I can extract from the code tomorrow at work. It's
> pretty modular so I should be able to point to something.

any news about this ?

cheers,
sebastien.
--
###################################
# Dr. Sebastien Binet
# Lawrence Berkeley National Lab.
# 1 Cyclotron Road
# Berkeley, CA 94720
###################################