从an earlier question中得知,一段代码导致了我PC上不同的动画,而这导致了另一个评论者。从那以后,我重新编写了代码,使其变得更简单,如建议的那样:
from numpy import sin, cos
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# create a time array from 0..100 sampled at 0.05 second steps
dt = 0.025
t = np.arange(0.0, 20, dt)
length = len(t)
def listmaker(n):
return [0]*n
th1 = listmaker(length)
th2 = listmaker(length)
#dummy data
for i in range(0,length):
th1[i] = 0.01*i
th2[i] = 0.05*i
x1 = sin(th1)
y1 = -cos(th1)
x2 = sin(th2) + x1
y2 = -cos(th2) + y1
fig = plt.figure()
ax = fig.add_subplot(111, autoscale_on=False, xlim=(-2, 2), ylim=(-2, 2))
ax.grid()
line, = ax.plot([], [], 'o-', lw=2)
time_template = 'time = %.1fs'
time_text = ax.text(0.05, 0.9, '', transform=ax.transAxes)
def init():
line.set_data([], [])
time_text.set_text('')
return line, time_text
def animate(i):
thisx = [0, x1[i], x2[i]]
thisy = [0, y1[i], y2[i]]
line.set_data(thisx, thisy)
time_text.set_text(time_template % (i*dt))
return line, time_text
ani = animation.FuncAnimation(fig, animate, np.arange(1, length),
interval=25, blit=True, init_func=init)
# ani.save('double_pendulum.mp4', fps=15)
plt.show()
问题在另一个线程中显示,因为FuncAnimation中的间隔(注意interval参数以毫秒为单位,因此相差1000倍)与时间步长dt相同,因此动画应以“实时”运行,即,图左上方的时间跟踪器应以与正常时钟相同的速度运行。尽管其他评论者似乎是这种情况,但在我自己的PC上却不是这种情况。我希望其他人也能够重现此问题,因此可以指出正确的方向。
我不知道有什么意义,但是我正在Windows机器上的Python 3.7(空闲3.6.6)上运行此代码。