当前位置:首页|资讯

Python二维动态图

作者:永远的修伊发布时间:2024-10-01

在Python中,matplotlib.animation模块提供了两种主要的动画类:FuncAnimationArtistAnimation。它们常用于通过逐帧显示数据的变化来创建动画。

1. FuncAnimation

FuncAnimationmatplotlib 中最灵活的动画工具。它通过重复调用一个更新绘图的函数来创建动画,每次调用都会更新绘图数据,从而生成多个帧组成的动画。

工作原理:

  • 数据更新FuncAnimation的核心是一个update函数,它在每一帧被重复调用,更新绘图中的数据。

  • BlittingFuncAnimation支持一个可选参数blit,如果设置为True,它只会重绘发生变化的部分,大大提高了性能,特别是对于复杂动画。

  • 间隔时间:可以设置每一帧之间的时间间隔(以毫秒为单位)来控制动画的速度。

FuncAnimation 示例:


  • init_func:定义动画的初始化设置,只调用一次用于初始化绘图。

  • update:在每一帧调用,用于更新绘图数据(如xdataydata)。

  • blit:如果设置为True,它只会重绘变化的部分,从而提高动画的性能。

  • frames:定义帧数以及用于更新每一帧数据的值。

  • “生活就像一个动画,每一帧都在变化,而如何掌控这些变化,取决于我们如何定义每个update函数。” —— 这让我想到电影《阿甘正传》里的经典台词:“生活就像一盒巧克力,你永远不知道下一块是什么味道。”

2. ArtistAnimation

ArtistAnimation 的工作原理与 FuncAnimation 不同。它通过组装多个Artist对象(如线条、点、图像等),将每一帧作为一个静态的图像集合,从而生成动画。

工作原理:

  • 帧作为艺术对象ArtistAnimation通过显式存储整个绘图(或图形)作为一帧,每一帧由一组Artist对象(如Line2D)组成。

  • 固定帧:与FuncAnimation不同,ArtistAnimation不会动态更新数据。它需要事先计算并存储所有帧。

  • 帧控制:在创建ArtistAnimation时,你需要提供所有帧(即Artist对象的列表)。

ArtistAnimation 示例:


关键点:

  • 预定义帧:所有帧必须预先计算并存储为Artist对象(例如Line2DImage)才能创建动画。

  • interval:指定帧之间的时间间隔(以毫秒为单位)。

  • blit:与FuncAnimation一样,blit可以用于优化性能。

  • 较少的灵活性:由于帧是预先提供的,它比FuncAnimation灵活性略低,后者可以动态更新绘图。

对比

特性FuncAnimationArtistAnimation灵活性高 – 动态更新绘图中 – 预定义帧性能(Blitting)高,使用blit可以提高性能高,使用blit可以提高性能使用场景数据驱动的动画,动态更新静态帧序列的动画帧控制动态,每帧更新数据需要预先计算所有帧适用场景折线图、散点图等复杂场景、基于图像的动画

总结:

  • FuncAnimation 更加灵活,适用于动态更新数据的动画,如实时变化的数据可视化。

  • ArtistAnimation 则适用于预先计算好的帧,适合将一组静态图像或图形组合成动画的场景。

根据需求的不同,可以选择适合的类来创建动画。

Gallery:

该实例代码来自网络

注:笔者使用Jupyter环境显示动态对象,需要安装ffmpeg;关于python环境,可参考笔者上一篇专栏的环境配置


Copyright © 2024 aigcdaily.cn  北京智识时代科技有限公司  版权所有  京ICP备2023006237号-1