logo

Iscrtavanje grafikona u Pythonu | Set 3

Iscrtavanje grafikona u Pythonu | Set 1 Iscrtavanje grafikona u Pythonu | Set 2 Matplotlib je prilično opsežna biblioteka koja podržava Animacije grafova također. Alati za animaciju usredotočeni su na matplotlib.animacija osnovna klasa koja pruža okvir oko kojeg se gradi funkcionalnost animacije. Glavna sučelja su Vremenska animacija i FuncAnimation a iz dva FuncAnimation je najprikladniji za korištenje. Montaža:
    Matplotlib: Odnosi se na Iscrtavanje grafikona u Pythonu | Set 1 Numpy: You can install numpy module using following pip command:
    pip install numpy
    FFMPEG: Potrebno je samo za spremanje animacije kao videa. Izvršnu datoteku možete preuzeti s ovdje .
Implementacija: 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 sjekira koji djeluje kao podzaplet. Raspon/ograničenje za x i y osi također se definira prilikom stvaranja elementa osi. Na kraju stvaramo zemljište element nazvan kao linija . U početku su točke x i y osi definirane kao prazne liste i širina linije (lw) postavljen je kao 2.
  • def init(): line.set_data([] []) return line
    Now we declare a initialization function vrućina . Ovu funkciju poziva animator za stvaranje prvog okvira.
  • 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. animirati() animator uvijek iznova poziva funkciju za stvaranje svakog okvira. Broj poziva ove funkcije određen je brojem okvira koji se prosljeđuje kao okviri argument animatoru. animirati() 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_podataka() funkcija za postavljanje x i y podataka i zatim vraćanje objekta iscrtavanja linija .
  • anim = animation.FuncAnimation(fig animate init_func=init frames=500 interval=20 blit=True)
    Now we create the FuncAnimation object šest . Potrebni su različiti argumenti objašnjeni u nastavku: smokva : figura koja se iscrtava. animirati : funkcija koja se poziva više puta za svaki okvir . init_func : funkcija koja se koristi za crtanje jasnog okvira. Poziva se jednom prije prvog okvira. okviri : broj okvira. (Bilješka: okviri također može biti iterable ili generator.) interval : trajanje između okvira (u milisekundama) boravak : postavka blit=True znači da će biti nacrtani samo oni dijelovi koji su promijenjeni.
  • anim.save('animated_coil.mp4' writer = 'ffmpeg' fps = 30)
    Now we save the animator object as a video file using uštedjeti() funkcija. Trebat će vam pisac filma za spremanje animacije. U ovom primjeru koristili smo FFMPEG filmski pisac. Tako pisac je postavljen kao 'ffmpeg'. fps označava sliku u sekundi.
Primjer 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.
  • Oblik zvijezde dobiva se stavljanjem k = 2,5 i 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)
Sve u svemu, animacije su izvrstan alat za stvaranje nevjerojatnih stvari i mnogo se više stvari može stvoriti pomoću njih. Dakle, ovako se animirani crteži mogu generirati i spremiti pomoću Matplotliba. Napravi kviz