From: Thomas C. <tca...@gm...> - 2015-04-12 00:35:54
|
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 <rne...@gm...> 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 > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > |