31

基本的なアニメーションには、matplotlib のアニメーション モジュールで FuncAnimation を使用しています。この関数は、アニメーションを永久にループします。マウスのクリックなどでアニメーションを一時停止および再開する方法はありますか?

4

5 に答える 5

34

これは、マウス クリックで一時停止するように変更した FuncAnimation の例です。アニメーションはジェネレーター関数 によって駆動されるためsimData、グローバル変数pauseが True の場合、同じデータを生成するとアニメーションが一時停止したように見えます。

の値はpaused、イベント コールバックを設定することで切り替えられます。

def onClick(event):
    global pause
    pause ^= True
fig.canvas.mpl_connect('button_press_event', onClick)

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

pause = False
def simData():
    t_max = 10.0
    dt = 0.05
    x = 0.0
    t = 0.0
    while t < t_max:
        if not pause:
            x = np.sin(np.pi*t)
            t = t + dt
        yield x, t

def onClick(event):
    global pause
    pause ^= True

def simPoints(simData):
    x, t = simData[0], simData[1]
    time_text.set_text(time_template%(t))
    line.set_data(t, x)
    return line, time_text

fig = plt.figure()
ax = fig.add_subplot(111)
line, = ax.plot([], [], 'bo', ms=10)
ax.set_ylim(-1, 1)
ax.set_xlim(0, 10)

time_template = 'Time = %.1f s'
time_text = ax.text(0.05, 0.9, '', transform=ax.transAxes)
fig.canvas.mpl_connect('button_press_event', onClick)
ani = animation.FuncAnimation(fig, simPoints, simData, blit=False, interval=10,
    repeat=True)
fig.show()
于 2013-05-24T10:56:00.587 に答える