1 引言

利用Python的Matplotlib-Animation库可以制作酷炫的数学公式动画,官方教程可访问链接.
本文为了清晰说明如何利用Animation类来实现动画效果,这里采用介绍一个点沿cos函数运动的例子来进行详细说明,其他复杂的动画效果也可据此原理进行类比扩展.

cos函数点运动示例

二阶钟摆示例

2 动画实现

这里主要以讲述上面的cos函数点运动的动画实现.

2.1 准备背景

在绘制动画前,我们需要将cos函数的背景图绘制出来. 这一步很简单,与我们平常使用matplotlib绘图一样.

def test1():x = np.linspace(0,2*np.pi,100)y = np.cos(x)fig = plt.figure()plt.plot(x,y)plt.grid(ls='--')plt.savefig("cos_test1.png")plt.show()

结果如下:

2.2 往背景中添加动画点

这一步我们使用animation库,往代码里添加动画点,我们先看代码,然后进行解释:

def update_points(num):point_ani.set_data(x[num], y[num])return point_ani,def test2():global point_ani,x,yx = np.linspace(0, 2 * np.pi, 100)y = np.cos(x)fig = plt.figure()plt.plot(x, y)point_ani, = plt.plot(x[0], y[0], "ro")plt.grid(ls="--")ani = animation.FuncAnimation(fig, update_points, np.arange(0, 100), interval=100, blit=True)ani.save('cos_test2.gif', writer='imagemagick', fps=10)plt.show()

结果如下:

[解释]
上述代码中,首先定义了一个函数 update_points ,该函数主要用于更新绘制图像中的数据点. 此函数的输入参数 num 代表当前动画的第几帧,函数的返回,即为我们需要更新的对象.接下来就是将该函数传入到FuncAnimation函数中,其主要参数介绍如下:

  • fig: 当前我们绘图对象
  • update_points: 更新动画的函数
  • np.arange(0,100): 动画帧数,这里需要是一个可以迭代的对象
  • interval: 动画的时间间隔
  • bit: 是否开启动画渲染

2.3 往背景中添加动画样式

上面代码所实现的动画效果相对来说比较单一,查阅官方文档后,我们可以继续往其中添加一些文本显示,或者在不同的条件下改变点样式。
想要达到上述效果也非常容易,只需在update_points函数中添加一些额外的代码控制逻辑即可。

def update_points_v2(num):if num % 5 == 0:point_ani.set_marker("*")point_ani.set_markersize(12)else:point_ani.set_marker("o")point_ani.set_markersize(8)point_ani.set_data(x[num], y[num])text_pt.set_text("x=%.2f, y=%.2f" % (x[num], y[num]))return point_ani, text_pt,def test3():global x,y,point_ani,text_ptx = np.linspace(0, 2 * np.pi, 100)y = np.cos(x)fig = plt.figure()plt.plot(x, y)point_ani, = plt.plot(x[0], y[0], "ro")plt.grid(ls="--")text_pt = plt.text(4, 0.8, '', fontsize=16)ani = animation.FuncAnimation(fig, update_points_v2, np.arange(0, 100), interval=100, blit=True)ani.save('cos_test3.gif', writer='imagemagick', fps=10)plt.show()

在函数update_points_v2中,我们添加了文本显示,显示移动点(x,y)的坐标值,同时我们实现了每隔5个点,我们将显示点的形状由圆点修改为五角星形状.结果如下:

观察上面的图像,我们希望显示的文本可以随着点的移动而移动,此时我们只需将更新动画函数修改成如下形式即可:

def update_points_v3(num):point_ani.set_data(x[num], y[num])if num % 5 == 0:point_ani.set_marker("*")point_ani.set_markersize(12)else:point_ani.set_marker("o")point_ani.set_markersize(8)text_pt.set_position((x[num], y[num]))text_pt.set_text("x=%.2f, y=%.2f" % (x[num], y[num]))return point_ani, text_pt,

最终效果展示如下:

3 总结

本文以cos函数为例进行讲解,一步一步地实现了点随cos曲线运动的动画效果,方便童鞋们熟悉Matplotlib的Animation类的基本使用方法,了解Python制作动画效果的背后原理.

您学废了嘛?

4 参考

参考链接一
参考链接二

关注公众号《AI算法之道》,获取更多AI算法资讯。

注: 完整代码,关注公众号,后台回复 动画 , 即可获取。

Python制作酷炫的动画效果相关推荐

  1. python做动画视频教程_Python+Kepler.gl轻松制作酷炫路径动画的实现示例

    1. 简介 Kepler.gl相信很多人都听说过,作为Uber几年前开源的交互式地理信息可视化工具,kepler.gl依托WebGL强大的图形渲染能力,可以在浏览器端以多种形式轻松展示大规模数据集. ...

  2. opencv极坐标转换成直角坐标_媲美 PS,用 Python 制作酷炫极坐标全景图

    点击上方"Python数据之道",选择"星标公众号" 收藏文章的同时,不要忘记「在看」 媲美 PS, 用 Python 制作酷炫极坐标全景图 0 概述  今天要 ...

  3. 赞!15个来自 CodePen 的酷炫 CSS 动画效果

    CodePen 是一个在线的前端代码编辑和展示网站,能够编写代码并即时预览效果.你在上面可以在线分享自己的 Web 作品,也可以欣赏到世界各地的优秀开发者在网页中实现的各种令人惊奇的效果. 今天这篇文 ...

  4. Python 图像 一样大小_媲美 PS,用 Python 制作酷炫极坐标全景图

    点击上方"Python数据之道",选择"星标公众号" 收藏文章的同时,不要忘记「在看」 媲美 PS, 用 Python 制作酷炫极坐标全景图 0 概述  今天要 ...

  5. js实现酷炫倒计时动画效果

    前段时间和朋友去音乐餐厅吃饭,中间有个活动,然后看到他们软件公众号H5有个活动开始的倒计时的动画效果,于是想了下实现思路. <!DOCTYPE html> <html> < ...

  6. 使用Python制作酷炫二维码(myqr)

    使用Python制作酷炫二维码 本篇参考自微信公众号,二三四张图片有改博主知乎的链接哦,https://mp.weixin.qq.com/s/Fq6_KKeN5T28DbfyDsGYDw 平时你见到的 ...

  7. 用 Python 制作酷炫的可视化大屏,特简单!

    作者 | 小F 来源 | 法纳斯特 在数据时代,我们每个人既是数据的生产者,也是数据的使用者,然而初次获取和存储的原始数据杂乱无章.信息冗余.价值较低. 要想数据达到生动有趣.让人一目了然.豁然开朗的 ...

  8. 用Python制作酷炫的可视化大屏,特简单!

    在数据时代,我们每个人既是数据的生产者,也是数据的使用者,然而初次获取和存储的原始数据杂乱无章.信息冗余.价值较低. 要想数据达到生动有趣.让人一目了然.豁然开朗的效果,就需要借助数据可视化. 以前给 ...

  9. python画创意图形_用Python制作酷炫图形之如意金箍棒_颜色增加模块应用

    如何简单地用Python编程绘制酷炫的图形呢?通常初入门者用Python的海龟画图模块绘制图形.我们只要导入海龟模块,就像下面这样,然后让海龟前进,就能画一个"一"字图形了. im ...

最新文章

  1. Linux CentOS 7 防火墙/端口设置
  2. python34.dll_python34.dll下载
  3. mysql数据库开发的36条军规
  4. UDP发字节,接收字节
  5. 来自Java空间的传送门
  6. 谷歌为安卓系统加入Fast Pair技术 蓝牙耳机将实现设备自动切换
  7. pageContext对象、JSP标签
  8. (转)EXCEL2007存储格式xlsx
  9. idea 导入template_如何将静态导入添加到IntelliJ IDEA实时模板
  10. 用汇编语言实现itoa函数
  11. System.Timers.Timer(定时器)
  12. DFS ZOJ 1002/HDOJ 1045 Fire Net
  13. 适用与IOS手机的python编辑器,让你不限空间,地点都能玩转pyhton代码 !...
  14. centos7.2如何升级到centos7.3最新版本
  15. bp神经网络预测模型流程图,bp神经网络实例分析
  16. 网易云音乐云打卡平台源码
  17. 一元三次方程求解matlab_用Matlab ode45函数解常微分方程
  18. 大学计算机基础b上机考试题目,大学计算机基础上机考试题库
  19. 海思HI35xx平台软件开发快速入门之H264解码实例
  20. 虚拟机是什么?有什么用

热门文章

  1. Ansible主机清单inventory
  2. 程序员高手和程序员菜鸟的区别是什么?
  3. uniapp打包 云端服务器返回错误:请先完成企业实名认证,证明您是“****“的开发者。如有疑问,请发邮件到service@dcloud.io咨询
  4. 乾颐堂安德HCIE面试真题系列19(戚ZJ)
  5. 有关公司治理的一些收获
  6. 打开我的电脑显示计算机管理 不显示磁盘,win10打开此电脑不显示磁盘盘符的解决方法?...
  7. 「击败星际争霸II职业玩家」的 AlphaStar是在作弊?
  8. 【ES6学习】对象的解构赋值
  9. 计算机处理io和cpu,虚拟化技术原理(CPU、内存、IO)
  10. 不仅仅是Google,您必须知道的全球十大地图API