Tom,

Thanks for the links. It does seem like fragments of my problem are
addressed in each of those comments, so I guess I'll have to wait for a bit
until those things get resolved. For now, I can just tell my students to
restart the IPython kernel each time they run the animation, which isn't
that hard. It's too bad that there isn't a 'stop' method now, but it's good
to hear that it isn't a completely terrible idea.

I do still need help with Question #3 from my original email, though,
because it affects both the Qt and nbagg backends, and it is a bit of a
show stopper. I can't quite understand why initializing a pcolor(mesh) with
random numbers makes it possible to update the array in an animation, but
if you use all zeros or ones, it seems to be immutable.

Ryan

On Sat, Apr 11, 2015 at 8:35 PM, Thomas Caswell <tcasw...@gmail.com> wrote:

> Ryan,
>
> I have not looked at your exact issue yet, but there seems to be some
> underlying issues with animation and nbagg which we have not tracked down
> yet. See:
>
> https://github.com/matplotlib/matplotlib/pull/4290
> https://github.com/matplotlib/matplotlib/issues/4287
> https://github.com/matplotlib/matplotlib/issues/4288
>
> Running until a given condition is an interesting idea, but I think that
> means the animation objects needs to have a public 'stop' method first!
>
> Tom
>
> On Fri, Apr 10, 2015 at 3:00 PM Ryan Nelson <rnelsonc...@gmail.com> wrote:
>
>> Good afternoon, all!
>>
>> I'm really digging the nbagg backend, and I'm trying to use it to make an
>> animation. As the subject suggests, though, I'm having some issues with
>> these features. I'm using Python 3.4, Matplotlib 1.4.3, and IPython 3.1.
>> Below is a small code sample that emulates my system. The pcolor call can
>> be substituted for pcolormesh, and I see the same behavior. (Sorry this is
>> a bit long. I tried to break it up as best as possible.)
>>
>> #############
>> #import matplotlib
>> #matplotlib.use('nbagg')
>> #%matplotlib nbagg
>> import numpy as np
>> import matplotlib.pyplot as plt
>> import matplotlib.animation as animate
>>
>> class Testing(object):
>>     def __init__(self, ):
>>         self.fig = plt.figure()
>>         array = np.random.rand(4,5)
>>         #array = np.zeros((4,5))
>>         self.pc = plt.pcolor(array, edgecolor='k', linewidth=1.)
>>         self.points = [plt.scatter(np.random.rand(), np.random.rand())]
>>
>>     def update(self, iter_num):
>>         array = np.random.rand(4*5)
>>         self.pc.set_array(array)
>>         for point in self.points:
>>             point.remove()
>>         self.points = [plt.scatter(np.random.rand(), np.random.rand())]
>>
>> test = Testing()
>> animate.FuncAnimation(test.fig, test.update, interval=1000, blit=False)
>> plt.show()
>> ###############
>>
>> 1. As is, this code runs fine with a Qt backend. It also runs fine as a
>> first call in a notebook if the `show` call is commented out and the
>> `%matplotlib` line is uncommented. However, if the `show` call is left in
>> and the `matplotlib.use` call is uncommented, then the pcolor array
>> changes, but the scatterpoint only shows on the first update and then
>> disappears forever. What is the difference between these two invocations?
>>
>> 2. With the `%matplotlib` magic uncommented and `show` removed, the first
>> invocation of this as a cell works fine. Closing the figure (with the red
>> X) and running the cell again shows two scatter plot points. Running it a
>> third time shows three scatter plot points. If you call `plt.clf` in the
>> next cell, I get a series of errors as follows:
>> _____
>> ERROR:tornado.application:Exception in callback <bound method
>> TimerTornado._on_timer of <matplotlib.backends.backend_nbagg.TimerTornado
>> object at 0x7f894cb10f98>>
>> Traceback (most recent call last):
>>   File "/usr/lib64/python3.4/site-packages/tornado/ioloop.py", line 976,
>> in _run
>>     return self.callback()
>>   File "/usr/lib64/python3.4/site-packages/matplotlib/backend_bases.py",
>> line 1290, in _on_timer
>>     ret = func(*args, **kwargs)
>>   File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", line
>> 925, in _step
>>     still_going = Animation._step(self, *args)
>>   File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", line
>> 784, in _step
>>     self._draw_next_frame(framedata, self._blit)
>>   File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", line
>> 803, in _draw_next_frame
>>     self._draw_frame(framedata)
>>   File "/usr/lib64/python3.4/site-packages/matplotlib/animation.py", line
>> 1106, in _draw_frame
>>     self._drawn_artists = self._func(framedata, *self._args)
>>   File "<ipython-input-2-f9290d8f6154>", line 22, in update
>>     point.remove()
>>   File "/usr/lib64/python3.4/site-packages/matplotlib/artist.py", line
>> 139, in remove
>>     self._remove_method(self)
>>   File "/usr/lib64/python3.4/site-packages/matplotlib/axes/_base.py",
>> line 1479, in <lambda>
>>     collection._remove_method = lambda h: self.collections.remove(h)
>> ValueError: list.remove(x): x not in list
>> ______
>> Why does this happen? Is there a way to close the animation cleanly?
>>
>> 3. If I uncomment the `np.zeros` call, the pcolor array never updates
>> irrespective of the backend. I see the same behavior with `np.ones` as
>> well, even if the dtype is set to `float`. Is there are a way to start with
>> a all-zero pcolor that allow dynamic updates?
>>
>> 4. I'd like to be able to have the animation run until a certain
>> condition is met. Is there a way to code a clean break for the animation?
>>
>>
>> As always, any help is most appreciated!
>>
>> Ryan
>>
>>
>>
>>
>>
>> ------------------------------------------------------------
>> ------------------
>> BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
>> Develop your own process in accordance with the BPMN 2 standard
>> Learn Process modeling best practices with Bonita BPM through live
>> exercises
>> http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual-
>> event?utm_
>> source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_
>> campaign=VA_SF_______________________________________________
>> Matplotlib-users mailing list
>> Matplotlib-users@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>>
>
------------------------------------------------------------------------------
BPM Camp - Free Virtual Workshop May 6th at 10am PDT/1PM EDT
Develop your own process in accordance with the BPMN 2 standard
Learn Process modeling best practices with Bonita BPM through live exercises
http://www.bonitasoft.com/be-part-of-it/events/bpm-camp-virtual- event?utm_
source=Sourceforge_BPM_Camp_5_6_15&utm_medium=email&utm_campaign=VA_SF
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to