logo

Grafplotting i Python | Sett 3

Grafplotting i Python | Sett 1 Grafplotting i Python | Sett 2 Matplotlib er et ganske omfattende bibliotek som støtter Animasjoner av grafer også. Animasjonsverktøyene sentrerer rundt matplotlib.animasjon baseklasse som gir et rammeverk som animasjonsfunksjonaliteten er bygget rundt. Hovedgrensesnittene er Timed Animation og FuncAnimasjon og ut av de to FuncAnimasjon er den mest praktiske å bruke. Installasjon:
    Matplotlib: Se Grafplotting i Python | Sett 1 Numpy: You can install numpy module using following pip command:
    pip install numpy
    FFMPEG: Det kreves bare for å lagre animasjonen som en video. Den kjørbare filen kan lastes ned fra her .
Implementering: Python
# importing required modules import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np # create a figure axis and plot element fig = plt.figure() ax = plt.axes(xlim=(-50 50) ylim=(-50 50)) line = ax.plot([] [] lw=2) # initialization function def init(): # creating an empty plot/frame line.set_data([] []) return line # lists to store x and y axis points xdata ydata = [] [] # animation function def animate(i): # t is a parameter t = 0.1*i # x y values to be plotted x = t*np.sin(t) y = t*np.cos(t) # appending new points to x y axes points list xdata.append(x) ydata.append(y) # set/update the x and y axes data line.set_data(xdata ydata) # return line object return line # setting a title for the plot plt.title('A growing coil!') # hiding the axis details plt.axis('off') # call the animator  anim = animation.FuncAnimation(fig animate init_func=init frames=500 interval=20 blit=True) # save the animation as mp4 video file anim.save('animated_coil.mp4' writer = 'ffmpeg' fps = 30) # show the plot plt.show() 
Here is how the output animation looks like: Now let us try to understand the code in pieces:
  • fig = plt.figure() ax = plt.axes(xlim=(-50 50) ylim=(-50 50)) line = ax.plot([] [] lw=2)
    Here we first create a figure i.e a top level container for all our subplots. Then we create an axes element øks som fungerer som et underplott. Området/grensen for x- og y-aksen defineres også mens du oppretter akseelementet. Til slutt lager vi tomt element kalt som linje . Opprinnelig har x- og y-aksepunktene blitt definert som tomme lister og linjebredde (lw) er satt til 2.
  • def init(): line.set_data([] []) return line
    Now we declare a initialization function varme . Denne funksjonen kalles av animatør for å lage den første rammen.
  • def animate(i): # t is a parameter t = 0.1*i # x y values to be plotted x = t*np.sin(t) y = t*np.cos(t) # appending new points to x y axes points list xdata.append(x) ydata.append(y) # set/update the x and y axes data line.set_data(xdata ydata) # return line object return line
    This is the most important function of above program. animere() funksjonen kalles opp igjen og igjen av animatøren for å lage hver frame. Antall ganger denne funksjonen vil bli kalt, bestemmes av antall rammer som sendes som rammer argument til animatør. animere() function takes the index of ith frame as argument.
    t = 0.1*i
    Here we cleverly use the index of current frame as a parameter!
    x = t*np.sin(t) y = t*np.cos(t)
    Now since we have the parameter t we can easily plot any parametric equation. For example here we are plotting a spiral using its parametric equation.
    line.set_data(xdata ydata) return line
    Finally we use set_data() funksjon for å sette x- og y-data og deretter returnere plottobjekt linje .
  • anim = animation.FuncAnimation(fig animate init_func=init frames=500 interval=20 blit=True)
    Now we create the FuncAnimation object seks . Det krever ulike argumenter forklart nedenfor: fig : figur som skal plottes. animere : funksjonen som skal kalles gjentatte ganger for hver ramme . init_func : funksjon som brukes til å tegne en tydelig ramme. Det kalles en gang før den første rammen. rammer : antall rammer. (Note: rammer kan også være en iterabel eller generator.) intervall : varighet mellom bilder (i millisekunder) blit : setting blit=True betyr at bare de delene som er endret vil bli tegnet.
  • anim.save('animated_coil.mp4' writer = 'ffmpeg' fps = 30)
    Now we save the animator object as a video file using spare() funksjon. Du trenger en filmskribent for å lagre animasjonsvideoen. I dette eksemplet har vi brukt FFMPEG-filmforfatter. Så forfatter er satt som 'ffmpeg'. fps står for bilde per sekund.
Eksempel 2 This example shows how one can make a rotating curve by applying some simple mathematics! Python
# importing required modules import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np # create a figure axis and plot element fig = plt.figure() ax = plt.axes(xlim=(-25 25) ylim=(-25 25)) line = ax.plot([] [] lw=2) # initialization function def init(): # creating an empty plot/frame line.set_data([] []) return line # set of points for a star (could be any curve) p = np.arange(0 4*np.pi 0.1) x = 12*np.cos(p) + 8*np.cos(1.5*p) y = 12*np.sin(p) - 8*np.sin(1.5*p) # animation function def animate(i): # t is a parameter t = 0.1*i # x y values to be plotted X = x*np.cos(t) - y*np.sin(t) Y = y*np.cos(t) + x*np.sin(t) # set/update the x and y axes data line.set_data(X Y) # return line object return line # setting a title for the plot plt.title('A rotating star!') # hiding the axis details plt.axis('off') # call the animator  anim = animation.FuncAnimation(fig animate init_func=init frames=100 interval=100 blit=True) # save the animation as mp4 video file anim.save('basic_animation.mp4' writer = 'ffmpeg' fps = 10) # show the plot plt.show() 
Here is how the output of above program looks like: Here we have used some simple mathematics to rotate a given curve.
  • Stjerneformen fås ved å sette k = 2,5 og 0p = np.arange(0 4*np.pi 0.1) x = 12*np.cos(p) + 8*np.cos(1.5*p) y = 12*np.sin(p) - 8*np.sin(1.5*p)
  • Now in each frame we rotate the star curve using concept of rotation in complex numbers. Let x y be two ordinates. Then after rotation by angle theta the new ordinates are: {x}' = xcos theta - ysin theta {y}' = xsin theta + ycos theta The same has been applied here:
    X = x*np.cos(t) - y*np.sin(t) Y = y*np.cos(t) + x*np.sin(t)
Alt i alt er animasjoner et flott verktøy for å lage fantastiske ting, og mange flere ting kan lages ved å bruke dem. Så dette var hvordan animerte plott kan genereres og lagres ved hjelp av Matplotlib. Lag quiz