logo

Grafieken plotten in Python | Set 3

Grafieken plotten in Python | Set 1 Grafieken plotten in Python | Stel 2 in Matplotlib is een behoorlijk uitgebreide bibliotheek die ondersteunt Animaties ook van grafieken. De animatietools zijn gecentreerd rond de matplotlib.animatie basisklasse die een raamwerk biedt waarrond de animatiefunctionaliteit is gebouwd. De belangrijkste interfaces zijn Getimede animatie En FuncAnimatie en uit de twee FuncAnimatie is het handigst om te gebruiken. Installatie:
    Matplotlib: Verwijzen naar Grafieken plotten in Python | Set 1 Numpy: You can install numpy module using following pip command:
    pip install numpy
    FFMPEG: Dit is alleen vereist om de animatie als video op te slaan. Het uitvoerbare bestand kan worden gedownload van hier .
Uitvoering: 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 bijl dat fungeert als een subplot. Het bereik/de limiet voor de x- en y-as wordt ook gedefinieerd tijdens het maken van het aselement. Tenslotte creëren we de verhaallijn element genaamd als lijn . Aanvankelijk zijn de x- en y-aspunten gedefinieerd als lege lijsten en lijnbreedte (lw) is ingesteld op 2.
  • def init(): line.set_data([] []) return line
    Now we declare a initialization function warmte . Deze functie wordt door de animator aangeroepen om het eerste frame te maken.
  • 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. animeren() functie wordt keer op keer door de animator aangeroepen om elk frame te maken. Het aantal keren dat deze functie wordt aangeroepen, wordt bepaald door het aantal frames dat wordt doorgegeven kaders argument voor animator. animeren() 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() functie om x- en y-gegevens in te stellen en vervolgens het plotobject terug te geven lijn .
  • anim = animation.FuncAnimation(fig animate init_func=init frames=500 interval=20 blit=True)
    Now we create the FuncAnimation object zes . Er zijn verschillende argumenten nodig die hieronder worden uitgelegd: afb : figuur die moet worden geplot. animeren : de functie die voor elk frame herhaaldelijk moet worden aangeroepen . init_func : functie die wordt gebruikt om een ​​duidelijk kader te tekenen. Het wordt één keer aangeroepen vóór het eerste frame. kaders : aantal frames. (Opmerking: kaders kan ook een iterabel of een generator zijn.) interval : duur tussen frames (in milliseconden) verblijf : instelling blit=True betekent dat alleen de onderdelen worden getekend die zijn gewijzigd.
  • anim.save('animated_coil.mp4' writer = 'ffmpeg' fps = 30)
    Now we save the animator object as a video file using redden() functie. Voor het opslaan van de animatievideo heeft u een filmschrijver nodig. In dit voorbeeld hebben we FFMPEG-filmschrijver gebruikt. Dus schrijver is ingesteld als 'ffmpeg'. fps staat voor frame per seconde.
Voorbeeld 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.
  • De stervorm wordt verkregen door k = 2,5 en 0 te stellenp = 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)
Al met al zijn animaties een geweldig hulpmiddel om geweldige dingen te maken en er kunnen nog veel meer dingen mee worden gemaakt. Dit was dus hoe geanimeerde plots kunnen worden gegenereerd en opgeslagen met Matplotlib. Quiz maken