Matplotlib 2.1 - animation module

एनीमेशन मॉड्यूल




matplotlib

विषय - सूची

एनीमेशन

Matplotlib में लाइव एनीमेशन बनाने का सबसे आसान तरीका Animation कक्षाओं में से एक का उपयोग करना है।

FuncAnimation फ़ंक्शन func को बार-बार कॉल करके एक एनीमेशन बनाता है।
ArtistAnimation Artist वस्तुओं के एक निश्चित सेट का उपयोग कर एनीमेशन।

दोनों मामलों में इंस्टेंस ऑब्जेक्ट का संदर्भ रखना महत्वपूर्ण है। एनीमेशन एक टाइमर द्वारा उन्नत होता है (आमतौर पर मेजबान जीयूआई ढांचे से) जो Animation ऑब्जेक्ट का एकमात्र संदर्भ रखता है। यदि आप Animation ऑब्जेक्ट का संदर्भ नहीं रखते हैं, तो यह (और इसलिए टाइमर), कचरा इकट्ठा किया जाएगा जो एनीमेशन को रोक देगा।

एनीमेशन को डिस्क उपयोग एनीमेशन.save या Animation.to_html5_video सहेजने के लिए

फिल्म प्रारूपों के समर्थन के बारे में विवरण के लिए नीचे सहायक वर्ग देखें।

FuncAnimation

FuncAnimation की आंतरिक कार्यप्रणाली कम या कम है:

for d in frames:
   artists = func(d, *fargs)
   fig.canvas.draw_idle()
   fig.canvas.start_event_loop(interval)

गैर-अवरुद्ध होने के लिए 'ब्लिटिंग' (नाटकीय रूप से लाइव प्रदर्शन में नाटकीय रूप से) को संभालने के विवरण के साथ, जीयूआई इवेंट लूप को बार-बार शुरू / बंद न करें, दोहराने, एकाधिक एनिमेटेड अक्षों को संभालने और आसानी से एनीमेशन को मूवी फ़ाइल में सहेजने के लिए।

कंप्यूटर ग्राफिक्स में 'ब्लिटिंग' एक पुरानी तकनीक है। सामान्य बात यह है कि मौजूदा बिट मैप (हमारे मामले में ज्यादातर रास्टरराइज्ड आकृति) लेना है और फिर शीर्ष पर एक और कलाकार 'ब्लिट' करना है। इस प्रकार, एक सहेजे गए 'साफ' बिटमैप को प्रबंधित करके, हम केवल कुछ कलाकारों को फिर से आकर्षित कर सकते हैं जो प्रत्येक फ्रेम में बदल रहे हैं और संभवतः महत्वपूर्ण मात्रा में समय बचा सकते हैं। FuncAnimation का उपयोग करते समय ( FuncAnimation blit=True पास करके) FuncAnimation का कोर लूप थोड़ा और जटिल हो जाता है

ax = fig.gca()

def update_blit(artists):
    fig.canvas.restore_region(bg_cache)
    for a in artists:
        a.axes.draw_artist(a)

    ax.figure.canvas.blit(ax.bbox)

artists = init_func()

for a in artists:
   a.set_animated(True)

fig.canvas.draw()
bg_cache = fig.canvas.copy_from_bbox(ax.bbox)

for f in frames:
    artists = func(f, *fargs)
    update_blit(artists)
    fig.canvas.start_event_loop(interval)

यह निश्चित रूप से कई विवरण छोड़ रहा है (जैसे कि आकृति का आकार बदलकर या पूरी तरह से फिर से तैयार होने पर पृष्ठभूमि को अद्यतन करना)। हालांकि, यह उम्मीद है कि कम से कम उदाहरण उदाहरण देता है कि init_func अंदर init_func और func का उपयोग कैसे किया जाता है और ' FuncAnimation ' कैसे काम करता है इसका सिद्धांत।

init_func और init_func पर अपेक्षित हस्ताक्षर आपके पुस्तक को रखने और तर्क की साजिश के बारे में FuncAnimation को रखना बहुत आसान है, लेकिन इसका मतलब यह है कि आपके द्वारा पारित FuncAnimation करने योग्य ऑब्जेक्ट्स को पता होना चाहिए कि उन्हें किस कलाकार पर काम करना चाहिए। जटिलता और encapsulation की, इसे संभालने के कई दृष्टिकोण हैं। सबसे आसान दृष्टिकोण, जो एक स्क्रिप्ट के मामले में काफी अच्छा काम करता है, कलाकार को वैश्विक दायरे में परिभाषित करना है और पायथन को चीजों को हल करने देना है। उदाहरण के लिए

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

fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'ro', animated=True)

def init():
    ax.set_xlim(0, 2*np.pi)
    ax.set_ylim(-1, 1)
    return ln,

def update(frame):
    xdata.append(frame)
    ydata.append(np.sin(frame))
    ln.set_data(xdata, ydata)
    return ln,

ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128),
                    init_func=init, blit=True)
plt.show()

दूसरी विधि functools.partial कि कलाकारों को 'बाध्य' कलाकारों को कार्य करने के लिए। आवश्यक कलाकारों और कार्यों को बनाने के लिए बंद करने का उपयोग करने का एक तीसरा तरीका है। कक्षा बनाने के लिए चौथी विधि है।

उदाहरण

ArtistAnimation

उदाहरण

लेखक वर्ग

प्रदान किए गए लेखक दो व्यापक श्रेणियों में आते हैं: पाइप-आधारित और फ़ाइल-आधारित। पाइप-आधारित लेखकों ने पाइप पर बाहरी प्रक्रिया में कैप्चर किए गए फ्रेम को स्ट्रीम किया है। पाइप-आधारित वेरिएंट अधिक प्रदर्शनशील होते हैं, लेकिन सभी प्रणालियों पर काम नहीं कर सकते हैं।

FFMpegWriter पाइप आधारित ffmpeg लेखक।
ImageMagickFileWriter फ़ाइल आधारित एनिमेटेड gif लेखक।
AVConvWriter पाइप आधारित avconv लेखक।

वैकल्पिक रूप से फ़ाइल-आधारित लेखकों को प्रत्येक फ्रेम के लिए अस्थायी फ़ाइलों को सहेजते हैं जो अंत में एक फ़ाइल में सिलाई जाती हैं। हालांकि धीमे, इन लेखकों को डीबग करना आसान हो सकता है।

FFMpegFileWriter फ़ाइल-आधारित ffmpeg लेखक।
ImageMagickWriter पाइप आधारित एनिमेटेड gif।
AVConvFileWriter फ़ाइल आधारित avconv लेखक।

मूल रूप से, MovieWriter एक ही अंतर्निहित Figure ऑब्जेक्ट से क्रमिक फ्रेम को पकड़ने का एक तरीका प्रदान करता है। बेस क्लास MovieWriter 3 विधियों और एक संदर्भ प्रबंधक लागू करता है। पाइप-आधारित और फ़ाइल-आधारित लेखकों के बीच एकमात्र अंतर उनके संबंधित setup विधियों के तर्कों में है।

setup() विधि का उपयोग लेखक (संभवत: एक पाइप खोलने) को तैयार करने के लिए किया जाता है, एक समय में एक ही फ्रेम को पकड़ने और finish() करने के लिए लगातार कॉल finish() फिल्म को अंतिम रूप देता है और आउटपुट फ़ाइल को डिस्क पर लिखता है। उदाहरण के लिए

moviewriter = MovieWriter(...)
moviewriter.setup(fig=fig, 'my_movie.ext', dpi=100)
for j in range(n):
    update_figure(n)
    moviewriter.grab_frame()
moviewriter.finish()

यदि लेखक वर्गों का उपयोग सीधे ( Animation.save माध्यम से नहीं), तो इसे संदर्भ संदर्भ प्रबंधक का उपयोग करने के लिए दृढ़ता से प्रोत्साहित किया जाता है

with moviewriter.saving(fig, 'myfile.mp4', dpi=100):
    for j in range(n):
        update_figure(n)
        moviewriter.grab_frame()

यह सुनिश्चित करने के लिए कि सेटअप और सफाई आवश्यकतानुसार किया जाता है।

MovieWriter

सहायक वर्ग

एनीमेशन बेस क्लासेस

Animation यह वर्ग matplotlib का उपयोग कर एनीमेशन के निर्माण को लपेटता है।
TimedAnimation समय-आधारित एनीमेशन के लिए Animation सबक्लास।

कस्टम एनिमेशन कक्षाएं

एनिमेटेड सबप्लॉट्स

लेखक रजिस्ट्री

लेखक मॉड्यूल के बजाय Animation.save save को स्ट्रिंग को पारित करने की अनुमति देने के लिए लेखक और कक्षा के नाम के बीच मानचित्र पर एक मॉड्यूल-स्तरीय रजिस्ट्री प्रदान की जाती है।

MovieWriterRegistry मानव पठनीय नाम से उपलब्ध लेखक वर्गों की रजिस्ट्री।

लेखक बेस क्लासेस

कोड डुप्लिकेशन आधार वर्गों को कम करने के लिए

AbstractMovieWriter फिल्में लिखने के लिए सार आधार वर्ग।
MovieWriter फिल्में लिखने के लिए बेस क्लास।
FileMovieWriter व्यक्तिगत फाइलों को लिखने और अंत में सिलाई करने के लिए MovieWriter

और मिश्रण प्रदान किए जाते हैं

AVConvBase Avconv आउटपुट के लिए मिक्सिन वर्ग।
FFMpegBase एफएफएमपीजी आउटपुट के लिए मिक्सिन क्लास।
ImageMagickBase ImageMagick आउटपुट के लिए मिक्सिन क्लास।

नई MovieWriter कक्षाओं को आसानी से कार्यान्वित करने के लिए स्रोत कोड देखें।

विरासत आरेख

Matplotlib.animation.FuncAnimation, matplotlib.animation.ArtistAnimation का विरासत चित्रMatplotlib.animation.AVConvFileWriter, matplotlib.animation.AVConvWriter, matplotlib.animation.FFMpegFileWriter, matplotlib.animation.FFMpegWriter, matplotlib.animation.ImageMagickFileWriter, matplotlib.animation.ImageMagickWriter का विरासत चित्र

पदावनत

MencoderBase
MencoderFileWriter

संस्करण 2.0 के बाद से बहिष्कृत।

MencoderWriter

संस्करण 2.0 के बाद से बहिष्कृत।