前言

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

作者:Hanz

— 1 —

如果你对本文的代码感兴趣,可以去 Github (文末提供)里查看。第一次运行的时候会报一个错误(还没找到解决办法),不过只要再运行一次就正常了。

这篇文章虽然不是篇典型的数据科学类文章,不过它涉及到数据科学以及商业智能的应用。Python 的 Matplotlib 是最常用的图表绘制以及数据可视化库。我们对折线图、柱状图以及热力图都比较熟悉,但你知道用 Matplotlib 还能做简单的动画吗?

下面就是用 Matplotlib 制作动画的例子。展示的是 John Conway 的 《The Game of Life》,这是一个 Metis(数据科学夏令营)中的编程挑战题目,同时给了我一个机会来制作我的第一个 Python 动画。看看结果的动图:

这篇文章的重点还是主要放在 python 中如何用 Matploylib 制作动画。

但如果你不太熟悉模拟游戏的话(它更像是可以看的模拟动画,而非可以玩的游戏),我来给大家介绍一下规则:

一开始先设置一个 N×N 的网格(我的动画中用的是 50×50 );

接着随机地向格子中填充“小细胞”(一开始随机地从 2500 个格子中选取 1500 个进行填充);

如果邻居小细胞少于等于 1 个,那格子中的小细胞会死掉;

如果邻居大于等于 4 个的也会死掉;

只有 2 个或 3 个邻居时可以生存;

空的格子中如果正好有 3 个邻居,则会长出 1 个新的“小细胞”;

— 2 —

建立网格

我们首先导入所需的库。

importtimefrom IPython importdisplayimportmatplotlib.pyplot as pltimport matplotlib.animation as animation

我们会利用 Matploylib 动画模块中的 FuncAnimation() 函数。 FuncAnimation()是通过多次调用一个函数并逐次更新图片来实现让图片动起来的。 我们来一步步地实现这个过程。

但首先,我们需要先初始化我们的网格。下面的几行代码用来存储我们输入的数据:

我们需要一个 50×50 大小的网格;

pad 变量可以使得计算邻居变得更容易。通过在边界外添加一层空白格子,我们就不需要额外再写一个逻辑来处理网格的边界。因此我们 50×50 的网格其实是被一圈空白格子包围着,这使得实际的 numpy 序列的大小为 52×52;

initial_cels 变量表示在网格启动的时候我们想要多少“小细胞”。他们会被随机地分布在网格上。

#Input variables for the board

boardsize= 50 #board will be X by X where X = boardsize

pad= 2 #padded border, do not change this!

initial_cells= 1500 #this number of initial cells will be placed

#in randomly generated positions

接下来我们随机地生成一系列“小细胞”的初始坐标(上面我们选择了 1500 个)。把这些坐标存储在 pos_list 变量中。

#Get a list of random coordinates so that we can initialize

#board with randomly placed organisms

pos_list=[]for i inrange(initial_cells):

pos_list.append([random.randint(1, boardsize),

random.randint(1, boardsize)])

然后我们是时候该初始化网格了。我们会用一组叫 my_board 的 numpy 序列来代表我们的网格——我们先生成一个 52×52 数值为 0 的矩阵序列作为开始(比 50×50 大是由于增加了空白边缘),然后调用 init_board() 函数来根据 pos_list 中的坐标把“小细胞”填充到网格中。辅助函数的具体细节我不再展开讲了,不过我把他们都整理到我的 Github 上了。

#Initialize the board

my_board= np.zeros((boardsize+pad, boardsize+pad))

my_board= init_board(pos_list, my_board)

— 3 —

制作网格动画

这是我们最期待的部分——动画!首先,我们需要完善一些配置。下面的几行代码用来生成展示我们动画的 mtplotlib 图框。

#Required line for plotting the animation

%matplotlib notebook#Initialize the plot of the board that will be used for animation

fig= plt.gcf()

接下来制作我们的第一帧。 mtplotlib 中的 imshow() 函数可以接收一组 numpy 矩阵然后返回一张图片。很酷吧!

#Show first image - which is the initial board

im=plt.imshow(my_board)

plt.show()

传入 imshow() 的变量是我们的初始的网格 my_board。生成的图片长这样:

现在我们需要写一个可以给 FuncAnimation() 调用的辅助函数。 animate() 函数接受一帧画面作为输入充当计数器。这个画面计数器就是 FuncAnimation() 和 animate() 函数沟通的桥梁——在每一个时间点(也就是每一帧),它都会调用一次 animate()。然后 animate() 会逐次使用辅助函数 update_board() 来对网格进行迭代。最后, set_data() 函数将图片更新为迭代后的网格,这就完成了。

#Helper function that updates the board and returns a new image of

#the updated board animate is the function that FuncAnimation calls

defanimate(frame):

im.set_data(update_board(my_board))return im,

一切顺利!我们准备调用 FuncAnimation() 函数了。注意输入的参数:

fig 是我们在前面创建的用来装载我们的动画的图形变量;

animate 是 FuncAnimation() 用画面计数器进行沟通的函数(自动传入,不需要特别声明)

frames 表示我们希望动画持续多少帧,在这里我们想要动画的长度为 200 帧;

interval 表示每一帧之间间隔的毫秒数。我们想要每帧之间间隔 50 毫秒。

# This line creates the animation

anim = animation.FuncAnimation(fig, animate, frames=200,

interval=50)

就这么简单!不是很难吧?为了庆祝我们成功制作动画,我再送大家一个动画:

— 4 —

总结

希望这篇文章能帮到大家。在结束之前,让我来帮助大家脑补更多我们今天学到的动画功能在数据科学上的应用:

一个个地画出蒙特卡洛模拟数据,你能观察到最终的分布是如何逐步形成的;

按顺序遍历时间序列数据,可以描绘你的模型或数据在新的观察角度下有什么表现;

当你改变输入参数时,比如族群数,可以展现你的算法是如何划分族群的;

根据时间或不同的数据子集生成关联热力图,用于观察不同的样本是如何影响你的模型的预期参数的。

原文地址:https://www.cnblogs.com/zwhy8/p/13324456.html

编程python如何制作动画_用Python Matplotlib 制作动画相关推荐

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

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

  2. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  3. python加入中小学课程_【python即将进入中学课堂,编程从小抓起,竟然在这几点上应验了】- 环球网校...

    [摘要]我们都知道,不论是我们使用的app,还是各种各样的游戏,小程序,都离不开编程软件的贡献,其中python占据了半壁江山,随着大家对python的重视,python即将进入中学课堂,这究竟是好是 ...

  4. python表情换头_使用Python制作表情包实现换脸功能

    "表情包"是现在非常流行的交流方式,通过一张图片就能把文字不能表达或不便于表达的情感给表示出来,表情包一经诞生,就统治了中国人的社交圈,尤其是年轻人,他们的社交方式是所谓" ...

  5. 学python编程能做什么项目_十个Python练手的实战项目,学会这些Python就基本没问题了...

    python项目练习一:即时标记 这是<python基础教程>后面的实践,照着写写,一方面是来熟悉python的代码方式,另一方面是练习使用python中的基本的以及非基本的语法,做到熟能 ...

  6. 机器人 python 极客入门_机器人Python极客编程入门与实战

    Python是一种面向对象.解释型的计算机程序设计语言,其简洁实用.高效,拥有众多模块库,可移植,跨平台,简单易学,易于上手.随着计算机深入发展,Python逐渐成为最适合青少年做创意设计的语言,也同 ...

  7. python身份证验证系统_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...

    大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及 ...

  8. python函数动画_用Python绘制几个动画

    Python中的matplotlib从1.1.0版本以后就开始支持绘制动画,Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形.这 ...

  9. python语言好不好_《python编程基础》这本书怎么样

    <python编程基础>这本书怎么样 发布时间:2020-11-11 12:01:06 来源:亿速云 阅读:73 作者:小新 小编给大家分享一下<python编程基础>这本书怎 ...

最新文章

  1. 用队列实现形如a+b@b+a#的中心对称字符的检验
  2. python类型转换-Python中如何进行数据类型转换?
  3. 光纤有什么优势?还有哪些挑战需要面对呢?
  4. 忘掉 Java 并发,先听完这个故事。。。
  5. I/O Performance HOWTO: Avoiding Bounce Buffers
  6. Flutter基础笔记
  7. JDK安装和坏境变量配置
  8. AI种番茄!腾讯xWUR智慧温室大赛预赛揭晓,农科院和三星等五队挺进决赛
  9. 数据传值方式、分支结构、循环结构
  10. Ubuntu 14 查看 docker中对应容器的 IP
  11. mac电脑访问另一台mac共享文件
  12. C#生成新浪微博短网址 示例源码
  13. 章子欣父亲发声:感谢提供帮助的媒体,包括百度
  14. 三、JVM — 类加载过程
  15. jQuery扩展半Lambda表达式 类似Linq的Where
  16. Linux内核线程kernel thread详解--Linux进程的管理与调度(十)
  17. 西门子博图安装期间反复重启的问题处理
  18. python 003 __小斌文档 | python 变量
  19. UA MATH566 统计理论 完备性的证明方法
  20. iterm配置alias

热门文章

  1. js破解 楚楚 街的登录参数加密
  2. Using XSS to bypass CSRF protection
  3. 算法时间复杂度以及代码实现
  4. 什么是 Azuki NFT 系列?
  5. 地方立法限制人肉搜索作用有限
  6. 基于51单片机的智能窗户烟雾浓度雨滴检测无线wifi控制系统proteus仿真原理图PCB
  7. python爬虫天气
  8. Android开发之--从app中跳转到淘宝店铺
  9. ubuntu linux定制过程
  10. H.264编码基础知识详解