【matplotlib】可视化解决方案——如何实现图形的动画效果

概述

在 matplotlib 中,不仅可以绘制静态图形,也可以绘制动态图形。动态图形就是我们称呼的动画,绘制动画主要使用animation模块绘制动画。接下来我们将详细介绍该方法。

使用 animation 绘制动画

下面的示例主要演示了使用FuncAnimation类绘制动画,该类通过不断的调用 func 参数指定的函数进而绘制动画,该类的定义如下:

class FuncAnimation(TimedAnimation):
	def __init__(self, fig, func, frames=None, init_func=None, fargs=None,  
             save_count=None, *, cache_frame_data=True, **kwargs):

参数如下:

  • fig:指定用于绘制动画的 Figure 对象;
  • func:在每一帧调用的函数。第一个参数将是 frames 参数的下一个值;
  • frames:传递动画的每一帧,这个其实就是传递一个可迭代序列,这个值就是 func 接受的参数;
    • 传递整数等价于传递 range(n)
    • 如果传递 None 等价于传递 itertools.count
  • init_func:这个方法会在每一帧绘制前进行调用;
  • fargs:用于每次调用 func 时接收的附加参数;
  • save_count:当无法从 frames 参数推断帧数时使用该参数,默认 100;
  • cache_frame_data:指定是否缓存帧数据,默认 True,一般不需要修改;
  • kwargs:传递TimedAnimation类的关键字参数;

完整的示例程序如下:

import matplotlib.pyplot as plt  
import numpy as np  
  
from matplotlib.animation import FuncAnimation  
  
fig, ax = plt.subplots(1, 1)  
  
x = np.linspace(0, 2 * np.pi, 5000)  
y = np.exp(-x) * np.cos(2 * np.pi * x)  
line, = ax.plot(x, y, color='cornflowerblue', lw=3)  
ax.set_ylim(-1.0, 1.0)  
  
  
def init():  
    line.set_ydata([np.nan] * len(x))  
    return line,  
  
  
def animate(data):  
    line.set_ydata(np.exp(-x) * np.cos(2 * np.pi * x + float(data) / 100))  
    return line,  
  
  
ani = FuncAnimation(fig, animate, init_func=init, frames=200, interval=2, blit=True)  
ani.save("test.gif", fps=20, writer='Pillow')  
plt.show()

绘制结果如下:

在这里插入图片描述

这里需要强调一点,func 在官网上的定义是 def func(frame, *fargs) -> iterable_of_artists,所以在返回值的时候必须加上**,** 号,否则就会报错,只有加上了返回的才是Line2D对象。

往期回顾

  1. 【matplotlib】可视化解决方案——如何正确使用plot方法
  2. 【matplotlib】可视化解决方案——如何正确使用bar方法
  3. 【matplotlib】可视化解决方案——如何向画布中添加坐标轴
  4. 【matplotlib】可视化解决方案——如何正确使用matplotlib颜色系统
  5. 【matplotlib】可视化解决方案——如何实现画布局部放大功能
  6. 【matplotlib】可视化解决方案——如何更改matplotlib配置信息
  7. 【matplotlib】可视化解决方案——如何定制化网格
  8. 【matplotlib】可视化解决方案——如何向画布添加交叉直线
  9. 【matplotlib】可视化解决方案——如何解决matplotlib中文乱码问题
  10. 【matplotlib】可视化解决方案——如何设置matplotlib风格集

文中难免会出现一些描述不当之处(尽管我已反复检查多次),欢迎在留言区指正,相关的知识点也可进行分享,希望大家都能有所收获!!如果觉得我的文章写得还行,不妨支持一下。你的每一个转发、关注、点赞、评论都是对我最大的支持!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猪猪家的大猪猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值