You are currently viewing Построение графиков на Python | Набор 3

Построение графиков на Python | Набор 3

Построение графиков на Python | Набор 1
Построение графиков на Python | Набор 2

Matplotlib-это довольно обширная библиотека, которая также поддерживает анимацию графиков. Инструменты анимации сосредоточены вокруг базового класса matplotlib.animation, который обеспечивает основу, вокруг которой строится функциональность анимации. Основными интерфейсами являются TimedAnimation и FuncAnimation, и из этих двух наиболее удобным в использовании является FuncAnimation.

Установка:

pip install numpy
  • FFMPEG: Это требуется только для сохранения анимации в виде видео. Исполняемый файл можно загрузить с здесь.

Реализация:

# 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()

Вот как выглядит выходная анимация:

Теперь давайте попробуем разобраться в коде по частям:

fig = plt.figure() 

Здесь мы сначала создаем фигуру, то есть контейнер верхнего уровня для всех наших подзаголовков.
Затем мы создаем элемент осей топор который действует как подзаголовок. Диапазон/предел для осей x и y также определяются при создании элемента оси.
Наконец, мы создаем сюжет элемент, названный как линия . Первоначально точки по осям x и y были определены как пустые списки и ширина строки

def init():
    line.set_data([], [])
    return line,

Теперь мы объявляем функцию инициализации, в этом . Эта функция вызывается аниматором для создания первого кадра.

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,

Это самая важная функция вышеуказанной программы. функция animate() вызывается аниматором снова и снова для создания каждого кадра. Количество раз, когда эта функция будет вызвана, определяется количеством кадров, которое передается аниматору в качестве аргумента кадров.
функция animate() принимает индекс i-го кадра в качестве аргумента.

t = 0,1*i

Здесь мы умело используем индекс текущего кадра в качестве параметра!

x = t*np.sin(t)
y = t*np.cos(t)

Теперь, поскольку у нас есть параметр t, мы можем легко построить любое параметрическое уравнение. Например, здесь мы строим спираль, используя ее параметрическое уравнение.

line.set_data(xdata, ydata)
return line,

Наконец, мы используем set_data() функция для задания данных x и y, а затем возврата объекта графика, линия.

anim = animation.FuncAnimation(fig, animate, init_func=init,
                               frames=500, interval=20, blit=True)

Теперь мы создаем объект FuncAnimation, anim . Для этого требуются различные аргументы, описанные ниже:
fig .: рисунок, который будет нанесен на график.
animate : функция, вызываемая повторно для каждого кадра.
init_func : функция, используемая для рисования четкого кадра. Он вызывается один раз перед первым кадром.
frames : количество кадров. (Примечание: кадры также могут быть повторяющимися или генераторными.)
interval : длительность между кадрами ( в миллисекундах)
blit : установка blit=True означает, что будут нарисованы только те части, которые изменились.

anim.save('animated_coil.mp4', writer = 'ffmpeg', fps = 30)

Теперь мы сохраняем объект аниматора в виде видеофайла с помощью save(). Вам понадобится сценарист фильма для сохранения анимационного видео. В этом примере мы использовали FFMPEG movie writer. Так, writer устанавливается как » ffmpeg’.
Шутер от первого лица означает кадр в секунду.

Пример 2

Этот пример показывает, как можно построить вращающуюся кривую, применив простую математику!

# 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()

Вот как выглядит вывод вышеприведенной программы:

Здесь мы использовали некоторую простую математику для поворота заданной кривой.

  • Форма звезды получается, если положить k = 2,5 и 0<t:

То же самое было применено и здесь:

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)
  • Теперь в каждом кадре мы поворачиваем звездную кривую, используя концепцию вращения в комплексных числах. Пусть x, y — две координаты. Затем после поворота на угол тета новые координаты будут:

То же самое было применено и здесь:

X = x*np.cos(t) - y*np.sin(t)
Y = y*np.cos(t) + x*np.sin(t)

В целом, анимация-отличный инструмент для создания удивительных вещей, и с ее помощью можно создать еще много вещей.

Итак, вот как можно создавать и сохранять анимированные сюжеты с помощью Matplotlib.