2016-01-28 152 views
1

我想使用FuncAnimation和circle.set_radius()來製作一個擴展圓的動畫。但是,僅當blit = False時,動畫才起作用。其代碼如下:Matplotlib FuncAnimation,blit = true時出錯。

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import animation 

fig, ax = plt.subplots() 
plt.grid(True) 
plt.axis([-0.6, 0.6, -0.6, 0.6]) 
circle1= plt.Circle([0,0],0.01,color="0.",fill=False, clip_on = True) 
ax.add_patch(circle1) 

dt = 1.0/20 
vel = 0.1 

def init(): 
    circle1.set_radius(0.01) 

def animate(i): 
    global dt, vel 
    r = vel * i * dt 
    circle1.set_radius(r) 
    return circle1, 

anim = animation.FuncAnimation(fig, animate, init_func=init, 
           frames=200, interval= 50, blit=True) 

它返回此錯誤:

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/site-packages/matplotlib/artist.py", line 61, in draw_wrapper 
    draw(artist, renderer, *args, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/matplotlib/figure.py", line 1139, in draw 
    self.canvas.draw_event(renderer) 
    File "/usr/local/lib/python2.7/site-packages/matplotlib/backend_bases.py", line 1809, in draw_event 
    self.callbacks.process(s, event) 
    File "/usr/local/lib/python2.7/site-packages/matplotlib/cbook.py", line 562, in process 
    proxy(*args, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/matplotlib/cbook.py", line 429, in __call__ 
    return mtd(*args, **kwargs) 
    File "/usr/local/lib/python2.7/site-packages/matplotlib/animation.py", line 620, in _start 
    self._init_draw() 
    File "/usr/local/lib/python2.7/site-packages/matplotlib/animation.py", line 1166, in _init_draw 
    for a in self._drawn_artists: 
TypeError: 'NoneType' object is not utterable 

我使用Mac OS。當我改變blit = False時,動畫將起作用。但是,只要我移動鼠標,動畫就會減慢。這是有問題的,因爲我有一個單獨的線程生成聲音輸出。在實踐中,圈子會碰到一些數據點併發出聲音。結果他們不同步。請幫忙。

回答

0

From the docs

If blit=True, func and init_func should return an iterable of drawables to clear.

所以 - 你需要添加return circle1,給你的函數init()。另一種選擇是在撥打FuncAnimation時根本不指定init_func - 您可能不需要它。如果沒有它,動畫可能會做你想要的。

circle1後的尾部逗號 - 這意味着一個(1種元素)的元組被返回,以便根據需要返回值是可迭代。您已在animate函數中擁有此功能。

相關問題