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