On 10/16/13 3:46 PM, Jason Grout wrote:
> On 10/16/13 1:58 PM, Michael Droettboom wrote:
>> Sorry to take so long to get to this. This is a nice piece of work.
>>
>> The most obvious thing is that this is a copy-and-paste of the existing
>> WebAgg backend -- and maintaining the two is going to be much harder
>> than building both out of the same pieces.  As of 6389d14f, the WebAgg
>> backend was refactored so that the transport that it uses to communicate
>> to the browser is no longer hard coded.  This was done in large part to
>> support working with IPyhton in this way.  (That is, it used to only
>> communicate with the browser through Tornado, but now it can be anything
>> that can send bits back and forth).  There's an example of this in
>> `examples/user_interfaces/embedding_webagg.py` that shows how to do this
>> (using Tornado, but again, it doesn't have to be). There's no guarantees
>> that this interface is sufficient, so it may require some back and forth
>> on this to make it all work.
>>
>> I think the first thing I would do would be to refactor this to use
>> that.  It's a little hard to tell what you've changed from the original
>> WebAgg backend to get it to support IPython.  If it were built on top
>> of, rather than in addition to, WebAgg, that would be more obvious.
>
> Thanks for the feedback.  I was thinking that a refactor to pull out the
> communication layer would be really nice.
>
> I didn't change the WebAgg backend because I figured you wanted it
> around still.  I figured a plain old diff with the file would reveal
> changes.
>
> Anyways, thanks for the pointer to the refactor commit.  I hope to look
> at this again sometime soon.
>

Following a very helpful conversation with Michael this morning in the 
dev hangout, I got this working with the current master (of matplotlib 
and ipython).  The refactoring made the code much better; thanks!

I updated the pull request at 
https://github.com/matplotlib/matplotlib/pull/2524

To test this, run IPython (master branch, to get the comm commits), and 
put this in a cell: 
https://github.com/matplotlib/matplotlib/pull/2524#issuecomment-28539813

Then you can execute something like:

from matplotlib.figure import Figure
import numpy as np
fig = Figure()
a = fig.add_subplot(111)
t = np.arange(0.0, 3.0, 0.01)
s = np.sin(2 * np.pi * t)
a.plot(t, s)
CommFigure(fig)

and get a live figure in the IPython notebook that uses the comm 
messaging infrastructure.

Michael---do you have time to take it from here?

Thanks,

Jason


------------------------------------------------------------------------------
DreamFactory - Open Source REST & JSON Services for HTML5 & Native Apps
OAuth, Users, Roles, SQL, NoSQL, BLOB Storage and External API Access
Free app hosting. Or install the open source package on any LAMP server.
Sign up and see examples for AngularJS, jQuery, Sencha Touch and Native!
http://pubads.g.doubleclick.net/gampad/clk?id=63469471&iu=/4140/ostg.clktrk
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to