logo

Vykreslování grafů v Pythonu | Sada 3

Vykreslování grafů v Pythonu | Sada 1 Vykreslování grafů v Pythonu | Sada 2 Matplotlib je poměrně rozsáhlá knihovna, která podporuje Animace také grafů. Nástroje animace se soustředí kolem matplotlib.animace základní třída, která poskytuje rámec, na kterém je postavena funkce animace. Hlavní rozhraní jsou Časovaná animace a FuncAnimation a z těch dvou FuncAnimation je nejpohodlnější k použití. Instalace:
    Matplotlib: Viz Vykreslování grafů v Pythonu | Sada 1 Numpy: You can install numpy module using following pip command:
    pip install numpy
    FFMPEG: Je vyžadován pouze pro uložení animace jako videa. Spustitelný soubor lze stáhnout z zde .
Implementace: 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 sekera který funguje jako podkres. Rozsah/limit pro osu xay je také definován při vytváření prvku os. Nakonec vytvoříme spiknutí prvek pojmenovaný jako čára . Zpočátku byly body os x a y definovány jako prázdné seznamy a šířka čáry (lw) byla stanovena jako 2.
  • def init(): line.set_data([] []) return line
    Now we declare a initialization function teplo . Tuto funkci volá animátor pro vytvoření prvního snímku.
  • 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. animovat() Funkce je volána znovu a znovu animátorem pro vytvoření každého snímku. Počet volání této funkce je určen počtem snímků, které jsou předány jako rámy argument animátorovi. animovat() 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() funkce pro nastavení dat x a y a poté vrácení objektu plot čára .
  • anim = animation.FuncAnimation(fig animate init_func=init frames=500 interval=20 blit=True)
    Now we create the FuncAnimation object šest . Vyžaduje různé argumenty vysvětlené níže: Obr : obrázek, který má být vykreslen. animovat : funkce, která se má volat opakovaně pro každý snímek . init_func : funkce používaná ke kreslení čistého rámečku. Volá se jednou před prvním snímkem. rámy : počet snímků. (Poznámka: rámy může být také iterovatelný nebo generátor.) interval : doba mezi snímky (v milisekundách) pobyt : nastavení blit=True znamená, že budou vykresleny pouze ty části, které se změnily.
  • anim.save('animated_coil.mp4' writer = 'ffmpeg' fps = 30)
    Now we save the animator object as a video file using uložit() funkce. Pro uložení animovaného videa budete potřebovat filmový editor. V tomto příkladu jsme použili vypalovačku filmů FFMPEG. Tak spisovatel je nastaveno jako 'ffmpeg'. fps znamená snímek za sekundu.
Příklad 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.
  • Tvar hvězdy získáme zadáním k = 2,5 a 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)
Celkově vzato jsou animace skvělým nástrojem k vytváření úžasných věcí a pomocí nich lze vytvořit mnohem více věcí. Takto lze vytvářet a ukládat animované grafy pomocí Matplotlib. Vytvořit kvíz