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

Reply via email to