logo

Побудова графіка в Python | Набір 3

Побудова графіка в Python | Набір 1 Побудова графіка в Python | Набір 2 Matplotlib — це досить обширна бібліотека, яка підтримує анімації а також графіків. Інструменти анімації зосереджені навколо matplotlib.animation базовий клас, який забезпечує структуру, навколо якої будується функціональність анімації. Основними інтерфейсами є TimedAnimation і FuncAnimation і з двох FuncAnimation є найзручнішим у використанні. Установка:
    Matplotlib: Зверніться до Побудова графіка в Python | Набір 1 Numpy: You can install numpy module using following pip command:
    pip install numpy
    FFMPEG: потрібно лише для збереження анімації як відео. Виконуваний файл можна завантажити з тут .
Реалізація: 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 сокира який виступає в якості підсюжету. Діапазон/обмеження для осей x і y також визначаються під час створення елемента осей. Нарешті ми створюємо сюжет елемент з назвою лінія . Спочатку точки осей x і y були визначені як порожні списки та ширина лінії (lw) встановлено як 2.
  • def init(): line.set_data([] []) return line
    Now we declare a initialization 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
    This is the most important function of above program. анімувати() Функція викликається знову і знову аніматором для створення кожного кадру. Кількість викликів цієї функції визначається кількістю кадрів, які передаються як кадрів аргумент аніматору. анімувати() 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() функція для встановлення даних x і y, а потім повернення об’єкта графіка лінія .
  • anim = animation.FuncAnimation(fig animate init_func=init frames=500 interval=20 blit=True)
    Now we create the FuncAnimation object шість . Для цього потрібні різні аргументи, пояснені нижче: фіг : фігура для нанесення. оживити : функція, яка викликається повторно для кожного кадру . init_func : функція, яка використовується для малювання чіткої рамки. Він викликається один раз перед першим кадром. кадрів : кількість кадрів. (Примітка: кадрів також може бути ітератором або генератором.) інтервал : тривалість між кадрами (у мілісекундах) залишитися : налаштування blit=True означає, що будуть намальовані лише ті частини, які змінилися.
  • anim.save('animated_coil.mp4' writer = 'ffmpeg' fps = 30)
    Now we save the animator object as a video file using зберегти() функція. Для збереження анімаційного відео вам знадобиться автор фільму. У цьому прикладі ми використали сценарист фільму FFMPEG. Отже письменник встановлено як "ffmpeg". fps означає кадр за секунду.
Приклад 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.
  • Форма зірки виходить, якщо покласти k = 2,5 і 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)
Загалом анімація є чудовим інструментом для створення дивовижних речей, і з їх допомогою можна створити багато іншого. Таким чином можна створювати та зберігати анімовані сюжети за допомогою Matplotlib. Створіть вікторину