matplotlib [python]:帮助解释动画示例

时间:2011-12-26 15:14:42

标签: animation matplotlib

Hello All and Merry Christmas,

有人可以解释一下以下代码示例的工作原理(http://matplotlib.sourceforge.net/examples/animation/random_data.html)吗?

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


timeline = [1,2,3,4,5,6,7,8,9,10] ;
metric = [10,20,30,40,50,60,70,80,90,100] ;

fig = plt.figure()
window = fig.add_subplot(111)
line, = window.plot(np.random.rand(10))

def update(data):
    line.set_ydata(data)
    return line,

def data_gen():
    while True:
        yield np.random.rand(10)


ani = animation.FuncAnimation(fig, update, data_gen, interval=5*1000)
plt.show()

特别是,我想使用列表(“metric”)来更新列表。 问题是如果我没有弄错的话,FuncAnimation正在使用生成器,但是,我怎样才能使它工作?

谢谢。

1 个答案:

答案 0 :(得分:1)

您可以将FuncAnimation提供给任何可迭代的,而不仅仅是生成器。 From docs

  

class matplotlib.animation.FuncAnimation(fig,func,frames = None,   init_func = None,fargs = None,save_count = None,** kwargs)

     

通过重复调用函数func来传递动画   fargs中的(可选)参数。 帧可以是生成器,可迭代,   或多个框架。 init_func是用于绘制清除的函数   帧。如果没有给出,则从第一项中抽取结果   将使用帧序列。

因此带有列表的等效代码可以是:

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

start = [1, 0.18, 0.63, 0.29, 0.03, 0.24, 0.86, 0.07, 0.58, 0]

metric =[[0.03, 0.86, 0.65, 0.34, 0.34, 0.02, 0.22, 0.74, 0.66, 0.65],
         [0.43, 0.18, 0.63, 0.29, 0.03, 0.24, 0.86, 0.07, 0.58, 0.55],
         [0.66, 0.75, 0.01, 0.94, 0.72, 0.77, 0.20, 0.66, 0.81, 0.52]
        ]

fig = plt.figure()
window = fig.add_subplot(111)
line, = window.plot(start)

def update(data):
    line.set_ydata(data)
    return line,

ani = animation.FuncAnimation(fig, update, metric, interval=2*1000)
plt.show()