使用animation绘制图表

Matplotlib 的 animation 概念指的是通过连续播放多幅图像来创建动画效果。这种动画形式也被称为帧动画,因为每个动画帧都是一个静态的图像,而通过连续播放这些帧,就形成了动画效果。在 Matplotlib 中,可以使用 animation 模块来实现这种帧动画。

Matplotlib 的 animation 模块提供了一些工具和函数来创建和操作帧动画。其中最基本的概念是Artist和FuncAnimation。

Artist 是 Matplotlib 中用于绘制图像的对象。在 animation 模块中,可以使用一系列的 Artist 对象来创建帧动画。每个 Artist 对象都代表一个静态的图像,而通过连续播放这些 Artist 对象,就形成了动画效果。

FuncAnimation 是 Matplotlib 中用于创建帧动画的函数。它接受一个函数作为参数,该函数定义了如何更新每个帧的图像。FuncAnimation 会不断重复调用这个函数,从而更新每个帧的图像并形成动画效果。

总的来说,Matplotlib 的 animation 概念是通过连续播放一系列的静态图像来创建动画效果,其中每个静态图像都是由 Artist 对象表示,而整个动画的播放过程是由 FuncAnimation 函数控制的。

Matplotlib 的 FuncAnimation 函数的主要参数包括:

  1. fig:表示动画所在的图表对象。这是一个 matplotlib.figure.Figure 对象,用于显示和保存动画。
  2. ax:表示动画中的轴对象。这是一个 matplotlib.axes.Axes 对象,用于定义动画的绘图区域。
  3. func:表示动画更新函数。这是一个可调用的函数,用于定义如何更新每个帧的图像。该函数接受两个参数:帧数和轴对象,并返回一个包含更新后的 Artist 对象的元组。
  4. frames:表示动画的帧数。这是一个迭代器或整数,用于指定动画的总帧数。如果是一个迭代器,则每次迭代返回一个帧数,并用于调用更新函数。如果是一个整数,则表示动画的总帧数,并自动生成帧数序列。
  5. init_func:表示动画的初始化函数。这是一个可调用的函数,用于在动画开始之前进行初始化操作。该函数接受一个轴对象作为参数,并返回一个包含 Artist 对象的元组。如果没有提供初始化函数,则默认为 None。
  6. fargs:表示传递给更新函数的额外参数。这是一个元组,包含除帧数和轴对象以外的其他参数,这些参数将传递给更新函数。
  7. save_count:表示保存的帧数。这是一个整数,用于指定保存的帧数。默认情况下,不保存任何帧。如果提供了该参数,则在动画播放过程中,每隔一定数量的帧就会保存一次当前帧的图像。
  8. interval:表示帧之间的间隔时间。这是一个整数,用于指定帧之间的间隔时间(以毫秒为单位)。默认情况下,使用默认的帧速率(通常为每秒 30 帧)。
  9. repeat_delay:表示动画重复播放之前的延迟时间。这是一个整数,用于指定动画重复播放之前的延迟时间(以毫秒为单位)。默认情况下,动画会立即重复播放。
  10. blit:表示是否启用 blit 模式。这是一个布尔值,用于指定是否启用 blit 模式。如果启用 blit 模式,则只有更新的部分会被重绘,这可以提高动画的绘制性能。默认情况下,该值为 False。

通过合理设置这些参数,可以使用 FuncAnimation 函数创建各种定制化的动画效果。请注意,在使用该函数时,还需要导入相应的库和模块,并准备好所需的数据和绘图元素。

步骤:

  1. 导入必要的库:首先需要导入 matplotlib.animation 以及其他必要的库。
    import numpy as np  
    import matplotlib.pyplot as plt  
    from matplotlib.animation import FuncAnimation

  2. 准备数据:根据你的需求准备数据。这可以是静态数据或动态生成的数据。
  3. 创建画布和坐标系:像平常一样使用 matplotlib 创建图形和轴对象。
  4. 动画设计:定义一个函数,这个函数描述了如何根据帧数来更新图形,使用 FuncAnimation 或其他方法创建一个动画对象。
  5. 保存或显示动画:可以将动画保存为文件,也可以在窗口中直接显示动画。

使用 matplotlib.animation 可以为静态的图形添加动态元素,使得数据可视化更加生动和吸引人。

绘制一个具有动画效果的图表,具体要求如下:

(1)  绘制一条正弦曲线;

(2)  绘制一个红色圆点,该圆点最初位于正弦曲线的左端;

(3)  制作一个圆点沿曲线运动的动画,并时刻显示圆点的坐标位置。

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

# 0. 设置中文黑体
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 1. 准备正弦曲线数据
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)

# 2. 创建画布和坐标系
fig = plt.figure(tight_layout=True)
ax = fig.add_subplot(111)

# 3. 绘制正弦曲线
ax.plot(x, y)

# 4. 动画设计
dot, = ax.plot(0, 0, 'ro')  # 圆点初始位置
tom = ax.text(4, 0.9, s="", fontsize=14)  # 添加无指定型文本在坐标(4,0.9)


# 定义每帧动画调用的函数
def zitao(a):
    dot.set_data(x[a], y[a])  # 更新圆点的数据
    tom.set_text(f"x={x[a]:.3f}, y={y[a]:.3f}")  # 右上角的圆点的实时位置
    return dot, tom  # 返回值


ani = FuncAnimation(fig=fig,  # 动画所在的画布
                    func=zitao ,  # 每帧动画调用的函数
                    frames=len(x),  # 动画的长度
                    interval=50,  # 更新动画的频率50mm
                    blit=True  # 更新所有的点
                    )

# 5.将动画保存为gif图片
ani.save("pratice7.3.gif", writer='pillow')

# 6.展示图表
plt.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值