logo

Risanje grafov v Pythonu | Komplet 3

Risanje grafov v Pythonu | Komplet 1 Risanje grafov v Pythonu | Komplet 2 Matplotlib je precej obsežna knjižnica, ki podpira Animacije tudi grafov. Orodja za animacijo so osredotočena na matplotlib.animation osnovni razred, ki zagotavlja ogrodje, okoli katerega je zgrajena funkcionalnost animacije. Glavni vmesniki so TimedAnimation in FuncAnimation in iz dveh FuncAnimation je najbolj priročen za uporabo. Namestitev:
    Matplotlib: Nanašajte se na Risanje grafov v Pythonu | Komplet 1 Numpy: You can install numpy module using following pip command:
    pip install numpy
    FFMPEG: Potreben je samo za shranjevanje animacije kot videa. Izvršljivo datoteko lahko prenesete s tukaj .
Izvedba: 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 sekira ki deluje kot podzaplet. Razpon/omejitev za osi x in y sta določena tudi med ustvarjanjem elementa osi. Končno ustvarimo plot element imenovan kot linija . Sprva sta bili točki osi x in y definirani kot prazni seznami in širina črte (lw) je postavljeno kot 2.
  • def init(): line.set_data([] []) return line
    Now we declare a initialization function toplota . To funkcijo pokliče animator, da ustvari prvi okvir.
  • 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. animiraj() funkcijo znova in znova kliče animator, da ustvari vsak okvir. Kolikokrat bo ta funkcija poklicana, je odvisno od števila okvirjev, ki so posredovani kot okvirji argument animatorju. animiraj() 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() funkcijo za nastavitev podatkov x in y in nato vrnitev predmeta izrisa linija .
  • anim = animation.FuncAnimation(fig animate init_func=init frames=500 interval=20 blit=True)
    Now we create the FuncAnimation object šest . Zahteva različne argumente, ki so pojasnjeni spodaj: fig : slika, ki jo je treba izrisati. animirati : funkcija, ki jo je treba klicati večkrat za vsak okvir . init_func : funkcija za risanje jasnega okvirja. Pokliče se enkrat pred prvim okvirjem. okvirji : število okvirjev. (Opomba: okvirji je lahko tudi iterable ali generator.) interval : trajanje med sličicami (v milisekundah) ostati : nastavitev blit=True pomeni, da bodo narisani samo tisti deli, ki so se spremenili.
  • anim.save('animated_coil.mp4' writer = 'ffmpeg' fps = 30)
    Now we save the animator object as a video file using shrani() funkcijo. Za shranjevanje animacijskega videa boste potrebovali pisca filma. V tem primeru smo uporabili program za snemanje filmov FFMPEG. torej pisatelj je nastavljen kot 'ffmpeg'. fps pomeni okvir na sekundo.
Primer 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.
  • Obliko zvezde dobimo tako, da postavimo k = 2,5 in 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)
Skratka, animacije so odlično orodje za ustvarjanje neverjetnih stvari in z njihovo pomočjo je mogoče ustvariti veliko več stvari. Tako je mogoče ustvariti in shraniti animirane risbe z uporabo Matplotliba. Ustvari kviz