厉害了,用Python绘制动态可视化图表,并保存成gif格式
作者 | 俊欣
来源 | 关于数据分析与可视化
最近有粉丝问道说“是不是可以将这些动态的可视化图表保存成gif图”,小编立马就回复了说后面会写一篇相关的文章来介绍如何进行保存gif格式的文件。那么我们就开始进入主题,来谈一下Python当中的gif模块。
安装相关的模块
首先第一步的话我们需要安装相关的模块,通过pip命令来安装
pip install gif
另外由于gif
模块之后会被当做是装饰器放在绘制可视化图表的函数上,主要我们依赖的还是Python当中绘制可视化图表的matplotlib
、plotly
、以及altair
这些模块,因此我们还需要下面这几个库
pip install "gif[altair]"
pip install "gif[matplotlib]"
pip install "gif[plotly]"
gif 和 matplotlib 的结合
我们先来看gif和matplotlib模块的结合,我们先来看一个简单的例子,代码如下
import random
from matplotlib import pyplot as plt
import gifx = [random.randint(0, 100) for _ in range(100)]
y = [random.randint(0, 100) for _ in range(100)]gif.options.matplotlib["dpi"] = 300@gif.frame
def plot(i):xi = x[i*10:(i+1)*10]yi = y[i*10:(i+1)*10]plt.scatter(xi, yi)plt.xlim((0, 100))plt.ylim((0, 100))frames = []
for i in range(10):frame = plot(i)frames.append(frame)gif.save(frames, 'example.gif', duration=3.5, unit="s", between="startend")
output
代码的逻辑并不难理解,首先我们需要定义一个函数来绘制图表并且带上gif
装饰器,接着我们需要一个空的列表,通过for
循环将绘制出来的对象放到这个空列表当中然后保存成gif
格式的文件即可。
gif和plotly的结合
除了和matplotlib的联用之外,gif和plotly之间也可以结合起来用,代码如下
import random
import plotly.graph_objects as go
import pandas as pd
import gifdf = pd.DataFrame({'t': list(range(10)) * 10,'x': [random.randint(0, 100) for _ in range(100)],'y': [random.randint(0, 100) for _ in range(100)]
})@gif.frame
def plot(i):d = df[df['t'] == i]fig = go.Figure()fig.add_trace(go.Scatter(x=d["x"],y=d["y"],mode="markers"))fig.update_layout(width=500, height=300)return figframes = []
for i in range(10):frame = plot(i)frames.append(frame)gif.save(frames, 'example_plotly.gif', duration=100)
output
整体的代码逻辑和上面的相似,这里也就不做具体的说明了
matplotlib多子图动态可视化
上面绘制出来的图表都是在单张图表当中进行的,那当然了我们还可以在多张子图中进行动态可视化的展示,代码如下
# 读取数据
df = pd.read_csv('weather_hourly_darksky.csv')
df = df.rename(columns={"time": "date"})@gif.frame
def plot(df, date):df = df.loc[df.index[0]:pd.Timestamp(date)]fig, (ax1, ax2, ax3) = plt.subplots(3, figsize=(10, 6), dpi=100)ax1.plot(df.temperature, marker='o', linestyle='--', linewidth=1, markersize=3, color='g')maxi = round(df.temperature.max() + 3)ax1.set_xlim([START, END])ax1.set_ylim([0, maxi])ax1.set_ylabel('TEMPERATURE', color='green')ax2.plot(df.windSpeed, marker='o', linestyle='--', linewidth=1, markersize=3, color='b')maxi = round(df.windSpeed.max() + 3)ax2.set_xlim([START, END])ax2.set_ylim([0, maxi])ax2.set_ylabel('WIND', color='blue')ax3.plot(df.visibility, marker='o', linestyle='--', linewidth=1, markersize=3, color='r')maxi = round(df.visibility.max() + 3)ax3.set_xlim([START, END])ax3.set_ylim([0, maxi])ax3.set_ylabel('VISIBILITY', color='red')frames = []
for date in pd.date_range(start=df.index[0], end=df.index[-1], freq='1M'):frame = plot(df, date)frames.append(frame)gif.save(frames, "文件名称.gif", duration=0.5, unit='s')
output
动态气泡图
最后我们用plotly模块来绘制一个动态的气泡图,代码如下
import gif
import plotly.graph_objects as go
import numpy as np
np.random.seed(1)N = 100
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
sz = np.random.rand(N) * 30layout = go.Layout(xaxis={'range': [-2, 2]},yaxis={'range': [-2, 2]},margin=dict(l=10, r=10, t=10, b=10)
)@gif.frame
def plot(i):fig = go.Figure(layout=layout)fig.add_trace(go.Scatter(x=x[:i],y=y[:i],mode="markers",marker=go.scatter.Marker(size=sz[:i],color=colors[:i],opacity=0.6,colorscale="Viridis")))fig.update_layout(width=500, height=300)return figframes = []
for i in range(100):frame = plot(i)frames.append(frame)gif.save(frames, "bubble.gif")
以上就是今天给同学们分享的小技巧,大家赶紧操练起来吧~
好消息!好消息!
Python 福利来啦,还等啥呢!现已开启招聘通道,后台+小编微信,投递你的简历呦~
招聘:Python后端开发工程师(西安)
往
期
回
顾
资讯
冬奥会夺金背后的杀手锏,是他
资讯
首个深度强化学习AI,控制核聚变
技术
在 Python 中妙用短路机制
资讯
英特尔要对外开放 x86 授权?
分享
点收藏
点点赞
点在看
相关文章:

facade-门面模式
解决问题 客户端调用逻辑与业务代码有效隔离,使得客户端调用只和Facade进行交互,内部的调用逻辑由Facade进行实现。此模式也可以和接口化编程结合,进一步降低客户端与业务逻辑的耦合 应用场景 它主要应用在代码结构的设计,合理组织…

淘宝李晓拴:淘宝网PHP电子商务应用
源自:http://tech.qq.com/a/20110512/000298.htm 大家好,大家知道淘宝搜索是一个典型PHP架构。在座同学不知道有多少人使用过淘宝搜索可以举手示意一下?在开始这个话题之前我们先谈一下Polyglot,多语言混合编程,淘宝有…

玩爬虫不会登陆?这个工具拿走不谢!
作者 | 周萝卜来源 | 萝卜大杂烩在日常学习当中,我们或多或少都会到网上抓取一些数据,比如豆瓣、微博等等,但是这些网站在非登录的情况只能拿到部分数据,有很多数据都是需要登陆之后才可以获取的,那么模拟登陆就成为了…

Oracle分页
先看以下两条语句的执行结果: 语句一:select rownum,empno,sal from emp order by empno; ROWNUM EMPNO SAL ---------- ---------- ---------- 1 7369 800 2 7499 1600 3 7521 …

Scala类型系统——高级类类型(higher-kinded types)
高级类类型就是使用其他类型构造成为一个新的类型,因此也称为 类型构造器(type constructors)。它的语法和高阶函数(higher-order functions)相似,高阶函数就是将其它函数作为参数的函数;高级类类型则是将构造类类型作为参数类型。一个高级类…

android休眠唤醒驱动流程分析【转】
转自:http://blog.csdn.net/hanmengaidudu/article/details/11777501标准linux休眠过程:l power management notifiers are executed with PM_SUSPEND_PREPAREl tasks are frozenl target system sleep state is announced to the …

PHP使用curl_multi_add_handle并行处理
http://www.php.net/manual/zh/function.curl-multi-add-handle.php<?php// 创建一对cURL资源$ch1 curl_init();$ch2 curl_init();// 设置URL和相应的选项curl_setopt($ch1, CURLOPT_URL, "http://www.baidu.com/");curl_setopt($ch1, CURLOPT_HEADER, 0);curl…

斯坦福团队是如何构建更好用的聊天 AI 呢?
作者:Standford AI译者:Yang来源:数据实战派2019 年,凭借着 Chirpy Cardinal 机器人,斯坦福首次在 Alexa Prize Socialbot Grand Challenge 3 中赢得了第二名。本文将进一步揭示 Chirpy Cardinal 开发细节,…

使用Linux进行缓冲区溢出实验的配置记录
在基础的软件安全实验中,缓冲区溢出是一个基础而又经典的问题。最基本的缓冲区溢出即通过合理的构造输入数据,使得输入数据量超过原始缓冲区的大小,从而覆盖数据输入缓冲区之外的数据,达到诸如修改函数返回地址等目的。但随着操作…

Javascript导出Excel的方法
<SCRIPT LANGUAGE"javascript"> function method1(tableid) {//整个表格拷贝到EXCEL中 var curTbl document.getElementById(tableid); var oXL new ActiveXObject("Excel.Application"); //创建AX对象excel var oWB oXL.Workbooks.Add(); //获取…

Top 15 不起眼却有大作用的 .NET功能集
目录1. ObsoleteAttribute2. 设置默认值属性: DefaultValueAttribute3. DebuggerBrowsableAttribute4. ??运算符5. Curry 及 Partial 方法6. WeakReference7. Lazy8. BigInteger9. 非官方关键字:__arglist __reftype __makeref __…

M2 芯片终于要来了?全线换新,性能远超M1 Max
不知不觉日历已翻至 2 月下旬,掐指一算,距离苹果一年一度春季新品发布会的召开似乎已越来越近。根据年初统计的 2022 年苹果新品预测,预计今年的苹果“小春晚”将在 Mac 方面有大动作。 那么,苹果将如何“动作”,又…

Python抓取新浪新闻数据(三)
非同步载入一般在XHR下查找,但是没有发现XHR下有相关内容。 转载于:https://blog.51cto.com/2290153/2126862

不畏浮云遮望眼--离散数学和组合数学
不畏浮云遮望眼,基础很重要!离散数学是算法和数据结构的基础,而算法和数据结构又是什么的基础?不解释了。1.《离散数学及其应用》作者: (美)Kenneth H. R出版社: 机械工业出版社出版年: 2007-6页数: 804定价: 79.00元丛书: 计算机…

上班摸鱼,刚刚发现在 VScode 中可玩魂斗罗,超级玛丽
今天,再给大家介绍一款更加有意思的vscode插件——“小霸王”。 GitHub传送门:https://github.com/gamedilong/anes-repository 安装方式: 对于插件的安装,可以按照上图的操作流程。 1.打开VScode,然后点击拓展。 2.在输入框中&am…

JSP 三 :九大隐式对象
2019独角兽企业重金招聘Python工程师标准>>> ###细节 每个JSP页面在第一次被访问时,web容器都会把请求交给JSP引擎(即一个Java程序)去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet),然后按照servlet的调用方…
阿里90后工程师利用ARM硬件特性开启安卓8终端“上帝模式”
文/图 阿里安全潘多拉实验室 团控 编者按:团控,阿里安全潘多拉实验室研究人员,该实验室主要聚焦于移动安全领域,包括对iOS和Android系统安全的攻击和防御技术研究。团控的主攻方向为安卓系统级漏洞的攻防研究。在今年3月的BlackHa…

c语言模拟实现oc引用计数
#include<stdio.h> #include<stdlib.h> //在c中引入 引用计数机制 // 要解决的问题: 1,指向某块动态内存的指针有几个? // 应该让这块动态内存记录指针的数量 // 所以开辟的动态内存大小应该取多大? // …

ATT与Intel汇编语言的比较
转自 陈莉君 一书《深入分析Linux内核源码》 http://www.kerneltravel.net/kernel-book/第二章%20Linux运行的硬件基础/2.6.1.htm2.6.1 AT&T与Intel汇编语言的比较我们知道,Linux是Unix家族的一员,尽管Linux的历史不长,但与其相关的很多事…

最近,又发现了 Pandas 中三个好用的函数
作者 | luanhz来源 | 小数志导读近日,在github中查看一些他人提交的代码时,发现了Pandas中这三个函数,在特定场景中着实好用,遂成此文以作分享。程序的基本结构大体包含三种,即顺序结构、分支结构和循环结构࿰…

Java Web的Maven项目中Properties文件的使用(2)
为什么80%的码农都做不了架构师?>>> 背景 Java Web中常用一些Properties文件进行部署配置,其中如果在里面配置OS的路径,需要跨平台,主要就是考虑win系统的路径是“\”,而Linux的路径是“/”。 …

TCP/IP 计算机网络协议
2019独角兽企业重金招聘Python工程师标准>>> 应用层: (典型设备:应用程序,如FTP,SMTP ,HTTP) DHCP(Dynamic Host Configuration Protocol)动态主机分配协议,使用 UDP 协议工作,主要有两个用途:给…

5分钟速通 AI 计算机视觉发展应用
作者 | 李秋键 出品 | AI科技大本营(ID:rgznai100) 计算机视觉是进步最大、发展最快的领域之一。根据 Global VIEW 的研究,全球计算机视觉市场规模在 2020 的价值为 113 亿 2000 万美元,预计从2021 到 2028 的复合年增长率为 7.3%…

javascript解析json
下载json库 http://www.json.org/json-zh.html自己找javascript的 或者直接去下面的 https://github.com/douglascrockford/JSON-jsphp生成json格式使用页面 <script src"scripts/json.js"></script>alert(data.toJSONString());如果返回false说明没数据…
高德联手凯迪拉克 发布全球首个高精地图应用
6月13日,在CES ASIA活动现场,上汽通用汽车凯迪拉克超级智能驾驶系统(Super CruiseTM)在国内首发亮相,未来将搭载在凯迪拉克CT6 40T铂金版车型上推向市场。高德地图作为上汽通用汽车在华合作伙伴,将为超级智…

WinDbg安装与使用
WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具,可以用于Kernel模式调试和用户模式调试,还可以调试Dump文件。 主页:http://msdn.microsoft.com/en-us/windows/hardware/gg463016 下载链接:http://msdl.microsoft…

mysql-5.6 升级 5.7
#准备工作 1、停机 [rootlocalhost local]# /etc/init.d/mysqld stop Shutting down MySQL.. [确定]2、切换版本 [rootlocalhost local]# mv /root/mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz ./mysql-5.7 [rootlocalhost local]# ln -s…

让假图无所遁形,阿里篡改图像检测大赛集结号令打响
近年来,伴随多媒体技术的迅速发展,图像安全隐患随之而来。一些不法分子通过伪造或恶意篡改证件、政府文件、转账记录截图等方式,不仅进行诈骗活动,还带来一些社会问题:2 月 10 日,广西柳州融水苗族自治县赵…

Apache网页优化之网页压缩
Apache网页压缩技术 实验介绍:本实验在虚拟机的Linux系统上搭建http-2.4.2,并在配置过程中开启mod_deflate模块,实现网页的压缩功能,最终通过fiddler抓包工具,验证mod_deflate压缩是否生效。 1、首先将搭建httpd服务所需要的软件包…

推荐阅读的多核编程技术书籍
多核编程技术好书推荐 多核程序设计技术——通过软件多线程提升性能 , 作 者: (孟加拉)阿克特(Akhter,S.),(美)罗伯茨(Roberts,J.) 著…