在下面的例子中,我想製作一個動畫,其中一個點在T秒內圍繞一個圓移動(例如T = 10)。然而它慢得多,不起作用。那麼,我的代碼有什麼問題以及如何解決它?據我瞭解api(http://matplotlib.org/api/animation_api.html)設置interval=1
應更新數字每毫秒。Matplotlib實時動畫
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
R = 3
T = 10
fig = plt.figure()
fig.set_dpi(300)
fig.set_size_inches(7, 6.5)
ax = plt.axes(xlim=(-10, 10), ylim=(-R*1.5, R*1.5))
ax.set_aspect('equal')
patch = plt.Circle((0, 0), 0.1, fc='r')
looping = plt.Circle((0,0),R,color='b',fill=False)
ax.add_artist(looping)
time_text = ax.text(-10,R*1.2,'',fontsize=15)
def init():
time_text.set_text('')
patch.center = (0, 0)
ax.add_patch(patch)
return patch,time_text,
def animate(i):
t=i/1000.0
time_text.set_text(t)
x, y = patch.center
x = R*np.sin(t/T*2*np.pi)
y = R*np.cos(t/T*2*np.pi)
patch.center = (x, y)
return patch,time_text
slow_motion_factor=1
anim = animation.FuncAnimation(fig, animate,
init_func=init,
frames=10000,
interval=1*slow_motion_factor,
blit=True)
plt.show()
我應該補充一點,問題取決於運行程序的機器。例如,在舊的英特爾雙核(P8700)(這是程序運行的盒子)上,這比在新的i7桌面cpu上慢很多。但在後一種情況下,它的速度也要慢得多。
的'interval'參數指定了* *最小幀之間的時間間隔。您可以增加它以獲得更一致(但較慢)的幀速率,但減小它並不會讓您的動畫渲染速度更快。實際上,每幀幾乎肯定會花費超過一毫秒的時間來呈現,因此您所看到的是兩臺機器可以管理的最大幀率之間的差異。 –
如果機器在1ms內無法提供新的繪圖,那麼動畫如何在1 ms內更新?這並不成功。找到您的機器可以使用和使用它的時間間隔。 O(100 Hz)間隔的通常監測速率比10 ms更快,這沒有意義。我會選擇40像素來獲得每秒25幀。 – MaxNoe