在Python中,Animation模块是一个用于创建简单的动画的工具。它可以通过不断地更新图形对象的位置来模拟运动的效果。 它的主要功能是通过定义一个或多个函数来生成动画帧,并将它们按顺序显示出来。这些函数通常包含一些参数,这些参数可以随着时间的推移而改变,从而导致图像的变化。
FuncAnimation 函数的基本语法: FuncAnimation(fig, func, frames=None, init_func=None, fargs=None, save_count=None, *, repeat=False, blit=True, cache_frame_data=True)
参数说明:
fig : Matplotlib 的 figure 实例。
func : 动画每一帧调用的函数。这个函数通常会更新 figure 中的图形元素以显示新的数据。
frames : None 或者数组或迭代器,动画应该持续的帧数。 init_func : 选择性地,在第一次绘制之前运行的初始化函数。 fargs : 传递给 func 和 init_func 的附加位置参数列表。
save_count : 可选的整数,指定要保存的最大数量的艺术家对象到缓存中。
repeat : bool,如果为 True,则动画无限循环。默认为Flase
cache_frame_data : 如果为 True(默认),则每次调用 func 时都会缓存 frame 参数的数据,以防止在每个帧中多次计算相同的值。
实例代码:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# 0. 设置中文黑体
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 1. 准备正弦曲线数据
x = np.linspace(-1, 2 * np.pi, 100)
y = np.sin(x)
# 2. 创建画布和坐标系
# fig, ax = plt.subplots()
fig = plt.figure(tight_layout=True)
ax = fig.add_subplot(111)
point, = plt.plot([], [], 'ro', animated=True)
x_list, y_list = [], []
# 3. 绘制正弦曲线
ax.plot(x, y)
# 4. 动画设计
def init():
ax.set_xlim(0, 6) # 设置x轴的范围
ax.set_ylim(-1, 1) # 设置y轴的范围
return point # 返回需要更新的对象
def update(frame):
x_list.append(frame) # 将新的帧数添加到x_list列表中
y_list.append(np.sin(frame)) # 将新的帧数添加到y_list列表中
point.set_data([frame], [np.sin(frame)]) # 更新圆点的数据
text = ax.text(.80, .80, f'x={frame:.3f}, # 创建一个新的文本对象,显示当前帧数和y值
y={np.sin(frame):.3f}',
transform=ax.transAxes)
return point,text
# 创建动画
ani = animation.FuncAnimation(fig, update,
frames=np.linspace(0, 6),
interval=50,
repeat=False,
init_func=init, blit=True) # 使用blit模式提高性能
#################################################
# 5.将动画保存为gif图片(用于上传博客)
#ani.save("pratice7.3.gif", writer='pillow')
# 6.展示图表
plt.show()
运行结果