The 'animated' property is used _deep_ with in `axes.draw` (
https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/axes/_base.py#L2035)
to skip artists with the 'animated' flag set. This makes them play nice
with blitting (which explicitly uses `axes.draw_artist`) so they are not
drawn on a call to `ax.draw` (which sets up the background canvas). Sorry,
I should not have included them with out a good explanation, I was feeling
too fancy with that example.
Tom
On Thu, Apr 16, 2015 at 11:27 AM Ryan Nelson <rnelsonc...@gmail.com> wrote:
> Ben,
>
> Sorry. I probably should have just dropped that entirely. In my code
> sample, it is actually commented out because it breaks the animation with
> the nbagg backend. It was in Tom's example, so I left it in because I
> wanted to find out what it was doing.
>
> Ryan
>
> On Thu, Apr 16, 2015 at 9:30 AM, Benjamin Root <ben.r...@ou.edu> wrote:
>
>> I just noticed your use of "animated=True". I have had trouble using that
>> in the past with the animation module. It is a leftover from the days
>> before the animation module and isn't actually used by it, IIRC. Try not
>> supplying that argument.
>>
>> On Thu, Apr 16, 2015 at 8:18 AM, Ryan Nelson <rnelsonc...@gmail.com>
>> wrote:
>>
>>> Tom,
>>>
>>> Thanks for the code. As it was given, I had to change `blit=True` in the
>>> `FuncAnimation` call in order to get this to work in a regular Qt backend.
>>> It did not work with the nbagg backend; however, if I used this code it
>>> works fine:
>>> ####
>>> %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.)#,
>>> animated=True)
>>> self.pc.set_clim([0, 1])
>>> self.points = [plt.scatter(np.random.rand(),
>>> np.random.rand())]#, animated=True)]
>>>
>>> def update(self, iter_num):
>>> array = np.random.rand(4*5)
>>> self.pc.set_array(array)
>>> for point in self.points:
>>> point.set_offsets([np.random.rand(), np.random.rand()])
>>> #return (self.pc, ) + tuple(self.points)
>>>
>>>
>>> test = Testing()
>>> ani = animate.FuncAnimation(test.fig, test.update, interval=250,
>>> blit=False, frames=50)
>>> plt.show()
>>> ####
>>> Also this code solves the problem I was having with several scatter
>>> points being displayed upon multiple runs of the same code cell.
>>>
>>> I wasn't familiar with the "animated" keyword, and it is not well
>>> documented yet. Can you give me a quick explanation of what it is doing?
>>>
>>> Ben: thanks for the hint about the _stop() method. I might look into
>>> that for my example.
>>>
>>> Thank you all for your assistance. Things are working pretty much as I
>>> need now!
>>>
>>> Ryan
>>>
>>> On Sun, Apr 12, 2015 at 9:24 AM, Thomas Caswell <tcasw...@gmail.com>
>>> wrote:
>>>
>>>> You can
>>>>
>>>>
>>>> ```
>>>>
>>>> #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.,
>>>> animated=True)
>>>>
>>>> self.pc.set_clim([0, 1])
>>>>
>>>> self.points = [plt.scatter(np.random.rand(), np.random.rand(),
>>>> animated=True)]
>>>>
>>>>
>>>> def update(self, iter_num):
>>>>
>>>> array = np.random.rand(4*5)
>>>>
>>>> self.pc.set_array(array)
>>>>
>>>> for point in self.points:
>>>>
>>>> point.set_offsets([np.random.rand(), np.random.rand()])
>>>>
>>>>
>>>> return (self.pc, ) + tuple(self.points)
>>>>
>>>>
>>>>
>>>> test = Testing()
>>>>
>>>> ani = animate.FuncAnimation(test.fig, test.update, interval=10,
>>>> blit=False, frames=50)
>>>>
>>>> plt.show()
>>>>
>>>> ```
>>>>
>>>> note the addition of the `set_clim` line in the `__init__` method.
>>>>
>>>>
>>>> You can also update the scatter artist in-place. The other changes
>>>> will make it a bit for performant if you use bliting (which does not work
>>>> with nbagg currently)
>>>>
>>>> Sorry I missed that part of the question first time through.
>>>>
>>>> Tom
>>>>
>>>> On Sun, Apr 12, 2015, 08:31 Ryan Nelson <rnelsonc...@gmail.com> wrote:
>>>>
>>>>> 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
>>>
>>>
>>
>
------------------------------------------------------------------------------
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