我有一个输出return (x, y)
的函数,我想从头到尾为x,y对设置动画。例如。这条线“随着时间的推移而发展”。
这就是我的输出:
x, y = stephan()
plt.plot(x,y)
当我尝试使用动画代码的snippit时:
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [])
def init():
line.set_data([], [])
return line,
def animate(i):
x, y = stephan()
line.set_data(x, y[i])
return line,
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=100, interval=20, blit=True)
我得到了这个非常无聊的输出:
它正在绘制一些东西,但肯定不是x,y输出。我认为我可能错误地使用了animate或init函数?奇怪的是,我还没有找到任何简单的代码。
答案 0 :(得分:0)
如果对stephan
的调用返回两个浮点数,y[i]
没有任何意义。此外,您希望将输出存储在列表中,以获得一行而不是每帧一个点。
一个工作示例可能看起来像这样
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
class Stephan():
i=0
def __call__(self):
self.i += 0.02
return self.i, np.random.randn(1)
stephan = Stephan()
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [])
def init():
line.set_data([], [])
return line,
X = []
def animate(i):
x, y = stephan()
X.append((x,y))
line.set_data(zip(*X))
return line,
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=100, interval=20, blit=True)
plt.show()
或者,如果stephan
返回两个值列表,您可以直接将这些列表设置为该行的数据。
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
class Stephan():
x=[0]
y=[1]
def __call__(self):
self.x.append(self.x[-1]+0.02)
self.y.append(np.random.randn(1))
return self.x, self.y
stephan = Stephan()
fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [])
def init():
line.set_data([], [])
return line,
def animate(i):
x, y = stephan()
line.set_data(x,y)
return line,
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=100, interval=20, blit=True)
plt.show()