使用matplotlib动画而不使用动画功能

时间:2017-02-04 02:18:11

标签: python animation matplotlib

有没有办法在不使用内置动画功能的情况下在matplotlib中为图形设置动画?我发现它们使用起来非常笨拙,并且觉得只绘制一个点,擦拭图形,然后绘制下一个点就会简单得多。

我设想的东西如:

def f():
     # do stuff here
     return x, y, t

其中每个t将是不同的框架。

我的意思是,我尝试过使用plt.clf()plt.close()之类的内容,但似乎没有任何效果。

1 个答案:

答案 0 :(得分:3)

确定可以在没有FuncAnimation的情况下进行动画制作。然而," enivisioned function"的目的并不是很清楚。在动画中,时间是自变量,即对于每个时间步,您可以生成一些新的数据以进行绘图或类似。因此,该函数将t作为输入并返回一些数据。

import matplotlib.pyplot as plt
import numpy as np

def f(t):
    x=np.random.rand(1)
    y=np.random.rand(1)
    return x,y

fig, ax = plt.subplots()
ax.set_xlim(0,1)
ax.set_ylim(0,1)
for t in range(100):
    x,y = f(t)
    # optionally clear axes and reset limits
    #plt.gca().cla() 
    #ax.set_xlim(0,1)
    #ax.set_ylim(0,1)
    ax.plot(x, y, marker="s")
    ax.set_title(str(t))
    fig.canvas.draw()
    plt.pause(0.1)

plt.show()

此外,还不清楚为什么要避免FuncAnimation。可以使用FuncAnimation生成与上面相同的动画,如下所示:

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

def f(t):
    x=np.random.rand(1)
    y=np.random.rand(1)
    return x,y

fig, ax = plt.subplots()
ax.set_xlim(0,1)
ax.set_ylim(0,1)

def update(t):
    x,y = f(t)
    # optionally clear axes and reset limits
    #plt.gca().cla() 
    #ax.set_xlim(0,1)
    #ax.set_ylim(0,1)
    ax.plot(x, y, marker="s")
    ax.set_title(str(t))

ani = matplotlib.animation.FuncAnimation(fig, update, frames=100)
plt.show()

没有太大变化,你有相同数量的线,在这里看到的并不是很尴尬 此外,当动画变得更复杂,想要重复动画,想要使用blitting或想要将其导出到文件时,FuncAnimation可以获得所有好处。