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