2013-05-24 10 views
15

में रोक/प्रारंभ/रोकें मैं कुछ मूल एनीमेशन के लिए matplotlib के एनीमेशन मॉड्यूल में FuncAnimation का उपयोग कर रहा हूं। यह फ़ंक्शन हमेशा एनीमेशन के माध्यम से loops। क्या कोई तरीका है जिसके द्वारा मैं माउस क्लिक करके एनीमेशन को रोक और पुनरारंभ कर सकता हूं?पाइथन matplotlib एनीमेशन

उत्तर

25

यहां a FuncAnimation example है जिसे मैंने माउस क्लिक पर रोक दिया है। चूंकि एनीमेशन जेनरेटर फ़ंक्शन द्वारा संचालित होता है, simData, जब वैश्विक चर pause सत्य है, तो उसी डेटा को उत्पन्न करने से एनीमेशन दिखाई देता है।

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) 
plt.show() 
+0

बढ़िया, बहुत बहुत धन्यवाद! उसने मेरे लिए चाल बनाई। –

+0

प्यारा, आसान, मनोरंजक, और एक तरह से, नास्तिक; https://youtu.be/TxmZ5sabk7U?t=17 या https://youtu.be/C1HuX6nQnQY?t=211 – uhoh

4

यह काम करता है ...

anim = animation.FuncAnimation(fig, animfunc[,..other args]) 

#pause 
anim.event_source.stop() 

#unpause 
anim.event_source.start() 
4

@fred से दोनों जवाब संयोजन और @unutbu यहां, हम एनीमेशन बनाने के बाद एक ऑनक्लिक फ़ंक्शन जोड़ सकते हैं:

import matplotlib.pyplot as plt 
import matplotlib.animation as animation 

fig = plt.figure() 

def run_animation(): 
    anim_running = True 

    def onClick(event): 
     nonlocal anim_running 
     if anim_running: 
      anim.event_source.stop() 
      anim_running = False 
     else: 
      anim.event_source.start() 
      anim_running = True 

    def animFunc(...args...): 
     # Animation update function here 

    fig.canvas.mpl_connect('button_press_event', onClick) 

    anim = animation.FuncAnimation(fig, animFunc[,...other args]) 

run_animation() 

अब हम क्लिक के साथ एनीमेशन को रोक या शुरू कर सकते हैं।

+0

matplotlib का कौन सा संस्करण आप चल रहे हैं? यह मेरे लिए काम नहीं करता है – bretcj7

+0

@ bretcj7 मैं संस्करण 1.5.3 का उपयोग कर रहा हूं। क्षमा करें, उसमें उल्लेख किया जाना चाहिए था! – woodenflute

+2

मुझे event_source.stop() या प्रारंभ के लिए matplotlib पर प्रलेखन प्रतीत नहीं होता है? क्या यह अस्तित्व में है? – bretcj7