logo

Rysowanie wykresów w Pythonie | Zestaw 3

Rysowanie wykresów w Pythonie | Zestaw 1 Rysowanie wykresów w Pythonie | Zestaw 2 Matplotlib to dość obszerna biblioteka obsługująca Animacje również wykresów. Narzędzia animacji skupiają się wokół matplotlib.animation klasa bazowa, która zapewnia framework, wokół którego zbudowana jest funkcjonalność animacji. Główne interfejsy to Animacja czasowa I FuncAnimacja i z dwóch FuncAnimacja jest najwygodniejszy w użyciu. Instalacja:
    Matplotlib: Patrz Rysowanie wykresów w Pythonie | Zestaw 1 Numpy: You can install numpy module using following pip command:
    pip install numpy
    FFMPEG: Jest wymagany tylko do zapisania animacji jako wideo. Plik wykonywalny można pobrać z Tutaj .
Realizacja: 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 topór który pełni rolę wątku pobocznego. Zakres/limit dla osi x i y definiuje się także podczas tworzenia elementu axes. Na koniec tworzymy działka element o nazwie tzw linia . Początkowo punkty osi x i y zostały zdefiniowane jako puste listy i szerokość linii (lw) została ustalona na 2.
  • def init(): line.set_data([] []) return line
    Now we declare a initialization function ciepło . Ta funkcja jest wywoływana przez animatora w celu utworzenia pierwszej klatki.
  • 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. animować() funkcja jest wywoływana wielokrotnie przez animatora w celu utworzenia każdej klatki. Liczba wywołań tej funkcji zależy od liczby klatek przekazywanych jako ramki argument do animatora. animować() 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() funkcja ustawiająca dane x i y, a następnie zwracająca obiekt wykresu linia .
  • anim = animation.FuncAnimation(fig animate init_func=init frames=500 interval=20 blit=True)
    Now we create the FuncAnimation object sześć . Wymaga różnych argumentów wyjaśnionych poniżej: figa : rysunek do wykreślenia. animować : funkcja, która ma być wywoływana wielokrotnie dla każdej ramki . init_funkcja : funkcja używana do rysowania wyraźnej ramki. Wywoływana jest raz przed pierwszą klatką. ramki : liczba klatek. (Notatka: ramki może być również iterowalnym lub generatorem.) interwał : czas między klatkami (w milisekundach) zostawać : ustawienie blit=True oznacza, że ​​zostaną narysowane tylko te części, które uległy zmianie.
  • anim.save('animated_coil.mp4' writer = 'ffmpeg' fps = 30)
    Now we save the animator object as a video file using ratować() funkcjonować. Do zapisania animacji wideo potrzebny będzie scenarzysta. W tym przykładzie użyliśmy rejestratora filmów FFMPEG. Więc pisarz jest ustawiony jako „ffmpeg”. fps oznacza klatkę na sekundę.
Przykład 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.
  • Kształt gwiazdy uzyskuje się wstawiając 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)
Podsumowując, animacje są doskonałym narzędziem do tworzenia niesamowitych rzeczy, a za ich pomocą można stworzyć o wiele więcej rzeczy. W ten sposób można generować i zapisywać animowane wykresy za pomocą Matplotlib. Utwórz quiz