有没有办法在不使用内置动画功能的情况下在matplotlib中为图形设置动画?我发现它们使用起来非常笨拙,并且觉得只绘制一个点,擦拭图形,然后绘制下一个点就会简单得多。
我设想的东西如:
def f():
# do stuff here
return x, y, t
其中每个t
将是不同的框架。
我的意思是,我尝试过使用plt.clf()
,plt.close()
之类的内容,但似乎没有任何效果。
答案 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
可以获得所有好处。