如何在Python中创造动画?

如何在Python中创造动画?

Python提供了多个用于创建动画的库,如Matplotlib、Pygame和Pyglet。Matplotlib是一款流行的Python数据可视化库,还提供了使用“FuncAnimation”函数创建动画的功能。‘FuncAnimation’是‘matplotlib.animation’模块中的一个类,通过调用用户定义的函数创建动画。在本教程中,我们将学习使用‘FuncAnimation’函数创建动画,并演示此方法的三个示例。

Syntax

animation = FuncAnimation(fig, animate_func, frames=frame_values, interval=interval_value, repeat=repeat_value)
Bash

在上面的语法中,fig是我们想要动画的对象,animate_func在每个帧更新图表,‘frame_values’是确定要显示的帧的可迭代值,‘interval_value’是以毫秒为单位的帧之间的时间间隔,‘repeat_value’是一个布尔值,用于确定动画是否在完成后重复。

示例1

在本示例中,我们创建了一个图对象‘fig’,并使用‘subplots()’函数创建了一个名为‘an’的轴对象ax。接下来,我们创建了一个包含0到2π之间200个点的numpy数组‘x’,以及一个将‘x’正弦值绘制为线条的‘line’对象。

每一帧动画都会调用‘animate()’函数,并通过将‘i/10.0’添加到‘x’来更新‘line’对象的y数据。然后该函数返回‘line’对象。然后,我们通过传入‘fig’、‘animate’、‘frames = 100’创建“FuncAnimation”的实例,以表示我们要显示100帧,并将时间间隔设置为50毫秒。然后我们调用‘plt.show()’来显示动画。

这是一个创建正弦波动画的简单示例-

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

fig, ax = plt.subplots()
x = np.linspace(0, 2*np.pi, 200)
line, = ax.plot(x, np.sin(x))

def animate(i):
   line.set_ydata(np.sin(x + i/10.0))
   return line,
animation = FuncAnimation(fig, animate, frames=100, interval=50)
plt.show()
Bash

输出

如何在Python中创造动画?

示例2

在本示例中,我们使用‘FuncAnimation’创建了一个在绘制区域中央垂直滚动的球的动画。首先,我们使用‘plt.Circle()’创建了一个名为circle的‘circle’对象,设置了‘init()’函数中‘ax’的x和y极限,然后将‘circle’对象添加到轴上。在‘animate()’函数中,使用变量‘i’更新‘circle’的垂直位置,然后返回‘circle’对象。

然后,创建FuncAnimation的实例,用‘fig’、‘animate’、‘init_func = init’、‘frames = 100’、‘interval = 20’和‘blit = True’。然后使用‘plt.show()’显示动画。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
circle = plt.Circle((0, 0), 1, fc='r')

def init():
   ax.set_xlim(-10, 10)
   ax.set_ylim(-10, 10)
   ax.add_artist(circle)
   return circle,

def animate(i):
   x, y = circle.center
   circle.center = (x, i/5)
   return circle,

animation = FuncAnimation(fig, animate, init_func=init, frames=100, interval=20,blit=True)
plt.show()
Bash

输出

如何在Python中创造动画?

示例3

在本示例中,我们创建了两条水平移动的线条的动画。首先,我们创建了一个图形对象‘fig’和一个轴对象‘ax’。然后我们定义了两个线条对象‘x1_line’和‘x2_line’,表示水平移动的两条线。

‘init()’函数用于初始化绘图。我们设定’ax’的x和y限制,并返回’x1_line’和’x2_line’对象。接下来,每个动画帧都会调用’animate()’函数,并更新’x1_line’和’x2_line’对象的数据。我们创建了一个numpy数组’x1’,在0到10之间有100个点,一个numpy数组’y1’,振幅为1的正弦波,相位移为-i/10.0。然后我们将’x1_line’的x数据设定为’x1’,y数据设定为’y1’。

同理,我们创建了一个numpy数组’x2’,在0到10之间有100个点,一个numpy数组’y2’,振幅为1的余弦波,相位移为-i/10.0。然后我们将’x2_line’的x数据设定为’x2’,y数据设定为’y2’。之后,我们通过传入’fig’、’animate’、’init_func=init’、’frames=100’(表示100帧)和’interval=50’(将帧之间的时间间隔设定为50毫秒)创建了’FuncAnimation’的实例。为了提高性能,我们还将’blit=True’。然后我们调用’plt.show()’进行显示。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

fig, ax = plt.subplots()
x1_line, = ax.plot([], [])
x2_line, = ax.plot([], [])

def init():
   ax.set_xlim(0, 10)
   ax.set_ylim(-1, 1)
   return x1_line, x2_line

def animate(i):
   x1 = np.linspace(0, 10, 100)
   y1 = np.sin(x1 - i/10.0)
   x1_line.set_data(x1, y1)
   x2 = np.linspace(0, 10, 100)
   y2 = np.cos(x2 - i/10.0)
   x2_line.set_data(x2, y2)
   return x1_line, x2_line

animation = FuncAnimation(fig, animate, init_func=init, frames=100, interval=50, blit=True)
plt.show()
Bash

输出

如何在Python中创造动画?

结论

我们了解到matplotlib是Python中流行的数据可视化库,使用’FuncAnimation’创建动画可以基本了解如何使用matplotlib创建图表和自定义它们。在Python中使用’FuncAnimation’创建动画是了解动画如何工作以及如何使用matplotlib创建有吸引力的可视化的基础。通过创建动画,人们可以提高他们的Python编程技能,并通过应对在每帧中更新图表、控制动画速度以及处理错误和异常等挑战来发展解决问题的技能。另外,创建动画允许创意和创新参与其中,因为人们可以设计视觉上吸引人和互动性强的动画,有效传达复杂的数据和概念。总的来说,人们可以使用此方法创建动画并进一步自定义它们。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册