2015-08-13 48 views
0

我的動畫工作不正常:matplotlib分散動畫;原創情節總是在屏幕上

隨着塊傳輸=真我的屏幕上的原有功能始終沒有它我具備的功能,這兩者都不是可取的每一次更新。

任何幫助非常感謝,進出口使用SciPy的包蟒蛇收集Win7上使用Spyder的IDE

我試着在animation.FuncAnimation()的參數,但沒有運氣打,我裸去骨代碼。

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



def run(): 

    x = range(100) 
    y = range(0, 1000, 10) 
    x2 = range(50) 
    y2 =range(0, 500, 10) 
    fig = plt.figure() 
    scat1 = plt.scatter(x, y) 


    ani = animation.FuncAnimation(fig, update_plot, blit = True) 
    plt.show() 

def update_plot(i): 
    x = range(i, 100+i) 
    y = range(i, 1000+i, 10) 
    scat1 = plt.scatter(x,y) 


    return scat1, 


run() 

回答

0

設置的init功能required "to set a clean slate"

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

def run(): 
    fig = plt.figure() 
    pathcol = plt.scatter([], []) 

    def init(): 
     pathcol.set_offsets([[], []]) 
     return [pathcol] 

    def update_plot(i, pathcol): 
     x = range(i, 100+i) 
     y = range(i, 1000+i, 10) 
     pathcol.set_offsets([(xi, yi) for xi, yi in zip(x, y)]) 
     return [pathcol] 

    plt.xlim(-10, 200) 
    plt.ylim(-100, 1500) 
    ani = animation.FuncAnimation(fig, update_plot, 
            init_func=init, 
            interval=0, 
            blit=True, fargs=[pathcol]) 
    plt.show() 

run() 
  • 而且,裏面update_plot一定要使用pathcol.set_offsets修改 現有PathCollection而不是再次調用plt.scatter。修改 現有的Artist會提高動畫速度。

  • init不帶任何參數,但我們希望init指在run創建的pathcol。因此我在run函數中移動了init,這樣init裏面的Python會在run的封閉範圍內找到pathcol

  • update_plot因爲fargs=[pathcol]傳遞pathcol,所以update_plot可以由一個功能run之外。但由於init嵌套在run內,爲了對稱,我決定把update_plot也放在run之內。