原标题:Matplotlib Animations 数据可视化进阶

如果你对我的代码有兴趣,可以在我的GitHub查看。当你第一次执行时,代码会报错(我一直没有解决),但是同样的代码框再执行一次,就能够正常跑通了。Matplotlib 是一个专业的数据可视化的 Python 包。除了折线图、直方图和热力图,Matplotlib HIA可以实现一些简单的动画。

如下图所示,以John Conway 的游戏人生,作为我第一个 Python 动画的素材。这个 gif 图的最后结果:

游戏人生

如果你对我如何对游戏人生进行编程感兴趣,可以查看我 GitHub 上面的代码(和评论)。这篇博客侧重如何在 Python 中使用 Matplotlib 增加动画。

如果对这个模拟过程不熟悉(过程更像模拟而非正在玩游戏),这里有一些建议:

我们首先建立一个 N x N 大小的面板 (在我们目前讨论的面板中是 50 x 50)。

我们随机选择一部分格子进行填充 (首次模拟,我随机在2500个格子里面填充了1500个),这里的一个格子代表一个单元格

每一个填充的格子的周围至多有一个格子为死亡

每一个填充的格子的周围有至少四个格子不会死亡

每一个填充的格子的周围有两到三个格子存活

每一个被三个填充格子相邻的空格子将会成为一个新的单元格

开始

我们先引入我们需要的 Python 包,利用 matplotlib 动画模块的 FuncAnimation 函数。

importtime

from IPythonimportdisplay

importmatplotlib.pyplot as plt

importmatplotlib.animation as animation

FuncAnimation 陆续重复调用函数,是的一个图片动画化,每一次调用更新一次图片。下面将一步步解释这个过程。

首先,我们先初始化面板。以下几行代码将产生输入数据:

我们想要一个 50x50 大小的面板。

填充变量使计算相邻单元格变得更容易,通过用总是空的额外单元格填充边缘,我们使它不需要编写额外的逻辑来处理板的边缘。因此,我们的50x50板被一个空单元格边界包围,使得实际的numpy数组的大小为52 x52。

变量 initial_cells 代表我们想要初始化的单元格数量,他们会随机在面板上产生。

# 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 in range(initial_cells):

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

random.randint(1, boardsize)])

然后轮到实例化这个面板。使用 numpy 向量 my_board 代表我们的面板,我们初始化52x52结构的向量,值都是0(由于边缘填充所以比50x50大一些),然后调用函数 init_board 使用 pos_list 中的坐标填充面板。具体查看GitHub。

# Initialize the board

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

my_board= init_board(pos_list, my_board)

设置面板的动画

我们一直在等待的部分——动画!首先,我们需要做一些例行工作。用下面几行代码创建matplotlib图形,它将用于显示我们的动画。

# Required line for plotting the animation

%matplotlib notebook

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

fig = plt.gcf

是时候做第一帧了,matplotlib中的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 里会先调用 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))

returnim,

恭喜,现在就可以顺利使用 FuncAnimation 了。注意函数的输入参数:

fig 是我们先前建立的用来显示动画的容器变量。

animate 函数是刚刚写的由 FuncAnimation 通过帧数来调用的函数(帧数参数会自动传入,不需要声明)。

frames 是动画最大帧数的限制,这里我们设置成 200 帧,也就是说 200 帧后动画会自动结束。

interval 是每两帧的间隔时间,单位为毫秒。这里我们用 50 毫秒。

# This line creates the animation

anim = animation.FuncAnimation(fig, animate, frames=200, interval=50)

这样就完成了,还可以吧?最终效果是这样的

结论

我希望这对你有帮助。在我结束之前,让我来集思广益一些更多的数据科学,比如我们今天学到的动画功能的应用:

一次次地进行蒙特卡罗模拟,以便观察结果分布是如何逐渐形成的。

遍历时间序列数据,以便描述模型或数据在新观测数据到达时的反应。

突出显示你的算法识别的集群如何随着输入(如集群数量)的改变而改变。

关联随时间或跨数据的不同子样本的热图,以可视化不同的样本可能如何影响模型的估计参数。

via:https://github.com/yiuhyuk/game_of_life

点击

,查看生成对抗网络(GAN)返回搜狐,查看更多

责任编辑:

python数据动态可视化进阶版,Matplotlib Animations 数据可视化进阶相关推荐

  1. 《看漫画学Python》1、2版分享,初阶+进阶一起学

    前言 学习Python的小伙伴大部分应该都知道<看漫画学Python:有趣.有料.好玩.好用(全彩版)>这本书! 但是刚开始接触Python的朋友都会有一个共同的烦恼,自学好无聊,好枯燥, ...

  2. python网络数据采集 第三版_(数据科学学习手札31)基于Python的网络数据采集(初级篇)...

    一.简介 在实际的业务中,我们手头的数据往往难以满足需求,这时我们就需要利用互联网上的资源来获取更多的补充数据,但是很多情况下,有价值的数据往往是没有提供源文件的直接下载渠道的(即所谓的API),这时 ...

  3. gta5 android版数据包,gta5手机版2.21g数据包

    gta5手机版2.21g数据包是一款非常自由的RPG游戏,游戏中拥有着非常高度的自由性,而且画质上也是非常的真实.游戏开局将是以3人的犯罪开始的,故事情节安排的非常不错哦!喜欢这款游戏的玩家,不如快来 ...

  4. gta5 android版数据包,gta5手机版2.8g数据包

    gta5手机版2.8g数据包是一款全新的都市冒险与战斗系列的RPG动作冒险类的手指游戏.在这个巨大的落砂机的城市,拥有着惊险刺激的开端,大型的战斗方式,实现更好的激情对决.化身成为退伍的老兵,回到家乡 ...

  5. python画带状图_13个使用Matplotlib实现数据可视化的Python代码

    和文字说明相比,清晰直观的图形更能令人印象深刻.一目了然.数据可视化对于做数据分析非常的有帮助,不管是人工智能,还是机器学习,都需要数据可视化. 在Python中,有一个2D绘图库Matplotlib ...

  6. python做动态折线图_python matplotlib折线图样式实现过程

    python matplotlib 同时画箱线图和折线图的问题 python3 matplotlib画两个折线图,X轴相同,Y轴生...你的memo和cpui里面是字符串,不是数字 将memo.app ...

  7. Win10下Python实现动态条形图(附解决matplotlib画图中文乱码问题)

    1.安装最新的bar-chart-race包0.2版本 从GitHub上下载压缩包,将解压后的文件夹放置在项目的创建的–虚拟环境/lib/python3.7/site-packages目录下. htt ...

  8. Three.js + React + Echart(折线图 光线流动效果,柱状图数据动态更新动画) + Svga-Web应用之数据大屏(适配1920*1080 2560*1440 3840*2160)

    Web应用之数据大屏 一.技术栈 React 17.0.0 搭建脚手架 Eahcrt常规图表 Svga动画 3D模型-Three.Js 大屏适配-目标大屏(4K -3840*2160) 二.React ...

  9. 使用Matplotlib进行数据可视化(二)

    前言 本篇为<使用Python进行数据分析>中介绍如何使用Matplotlib库进行数据可视化的第二篇,主要内容为如何绘制多子图,在图上添加文字和注释,如何自定义坐标轴刻度,设置自己的绘图 ...

最新文章

  1. java邮件接收代码,JavaMail入门第四篇 接收邮件(示例代码)
  2. 实现日、周、月排行统计 sql
  3. 玩转Github —— Octotree Chrome插件
  4. SQLite的使用(二):数据增删改查
  5. 有效提高作品率的UI设计技巧,你知道多少?
  6. thinkphp中volist 和foreach 的区别
  7. 华为机顶盒视频播放代码
  8. Magisk 安装error
  9. django 转发_Django开发常用30个软件包
  10. Windows 10 DJL 安装 部署 Java机器学习 Pytorch
  11. 滑动验证码整合SpringBoot方案推荐
  12. CentOS7系统安装搜狗拼音输入法
  13. poj 2187(旋转卡壳)
  14. Spring Boot项目介绍(值得学习,超详细)
  15. 【模式识别与机器学习】模式识别中的一些基本概念
  16. 计算1~50之间的素数之和
  17. 我的同学聚会--性格决定命运[转载]
  18. java装逼的话_Java 源码装逼技能之让人懵逼的符号
  19. 配置selenium 启动 Chromium
  20. 以太坊外无Defi?EOS:我有

热门文章

  1. 2022春秋杯-春季赛 勇者山峰 writeup(misc全部+web签到)
  2. 如何为深澜设置自动登录(PPPOE)
  3. 基于java汽车维修保养管理系统
  4. 安卓端自行实现工信部要求的隐私合规检测一(教你手写Xposed模块代码)
  5. 日志框架 SLF4j
  6. 电感电流 ――DC/DC 电路中电感的选择
  7. QT之QCustomPlot绘图实现8通道串口虚拟示波器
  8. 关于华科考研的一点总结
  9. 计算机管理的mtp是什么,电脑的MTP驱动是什么?
  10. 电子证照标识生成校验位生成,符合36904-2018和7064 MOD37.36文件要求