当前位置: 首页 > 编程日记 > 正文

厉害了,用Python绘制动态可视化图表,并保存成gif格式

963e07262d8e4a46838736eacc9fa62b.gif

作者 | 俊欣

来源 | 关于数据分析与可视化

最近有粉丝问道说“是不是可以将这些动态的可视化图表保存成gif图”,小编立马就回复了说后面会写一篇相关的文章来介绍如何进行保存gif格式的文件。那么我们就开始进入主题,来谈一下Python当中的gif模块。

1f9b30a17822feaf860001f99e0581d1.png

安装相关的模块

首先第一步的话我们需要安装相关的模块,通过pip命令来安装

pip install gif

另外由于gif模块之后会被当做是装饰器放在绘制可视化图表的函数上,主要我们依赖的还是Python当中绘制可视化图表的matplotlibplotly、以及altair这些模块,因此我们还需要下面这几个库

pip install "gif[altair]"     
pip install "gif[matplotlib]"
pip install "gif[plotly]"

4d9d18b7aeb9cd19dcd9262d4259d1f3.png

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

fbbd89b808da92eaa0797dbda96464ff.gif

代码的逻辑并不难理解,首先我们需要定义一个函数来绘制图表并且带上gif装饰器,接着我们需要一个空的列表,通过for循环将绘制出来的对象放到这个空列表当中然后保存成gif格式的文件即可。

af5ad1a23a838c0ba726ff0ab96a75db.png

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

da0ad8865542c2a99e379c6effc58ade.gif

整体的代码逻辑和上面的相似,这里也就不做具体的说明了

cdbeec9ed733e65bfadf57b322ff055c.png

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

8372a826cb0fc45a5f9a9a95ece2605f.gif

83c07bf32876ca99b5784e83f0d90b00.png

动态气泡图

最后我们用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")

以上就是今天给同学们分享的小技巧,大家赶紧操练起来吧~

d21a8ba872ea480abd5fc8e0630518e3.gif

好消息!好消息!

Python 福利来啦,还等啥呢!现已开启招聘通道,后台+小编微信,投递你的简历呦~

招聘:Python后端开发工程师(西安)

c1b7c057a3d8732cb5840fef10a9919f.png

a514c35e929d53836e26a4e7e8ffa193.gif

资讯

冬奥会夺金背后的杀手锏,是他

资讯

首个深度强化学习AI,控制核聚变

技术

在 Python 中妙用短路机制

资讯

英特尔要对外开放 x86 授权?

cc22db17e46a61a7f0056a51bb31e703.png

分享

1e9c74c272dd4689491d562d5758c526.png

点收藏

119dfb7ffa08374fdfc032a098e99ca7.png

点点赞

f6b65b529d2a439b940fd1f9ab95bba2.png

点在看

相关文章:

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 呢?

作者&#xff1a;Standford AI译者&#xff1a;Yang来源&#xff1a;数据实战派2019 年&#xff0c;凭借着 Chirpy Cardinal 机器人&#xff0c;斯坦福首次在 Alexa Prize Socialbot Grand Challenge 3 中赢得了第二名。本文将进一步揭示 Chirpy Cardinal 开发细节&#xff0c;…

使用Linux进行缓冲区溢出实验的配置记录

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

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. 设置默认值属性&#xff1a; DefaultValueAttribute3. DebuggerBrowsableAttribute4. &#xff1f;&#xff1f;运算符5. Curry 及 Partial 方法6. WeakReference7. Lazy8. BigInteger9. 非官方关键字&#xff1a;__arglist __reftype __makeref __…

M2 芯片终于要来了?全线换新,性能远超M1 Max

‍‍不知不觉日历已翻至 2 月下旬&#xff0c;掐指一算&#xff0c;距离苹果一年一度春季新品发布会的召开似乎已越来越近。根据年初统计的 2022 年苹果新品预测&#xff0c;预计今年的苹果“小春晚”将在 Mac 方面有大动作。 那么&#xff0c;苹果将如何“动作”&#xff0c;又…

Python抓取新浪新闻数据(三)

非同步载入一般在XHR下查找&#xff0c;但是没有发现XHR下有相关内容。 转载于:https://blog.51cto.com/2290153/2126862

不畏浮云遮望眼--离散数学和组合数学

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

上班摸鱼,刚刚发现在 VScode 中可玩魂斗罗,超级玛丽

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

JSP 三 :九大隐式对象

2019独角兽企业重金招聘Python工程师标准>>> ###细节 每个JSP页面在第一次被访问时&#xff0c;web容器都会把请求交给JSP引擎&#xff08;即一个Java程序&#xff09;去处理。JSP引擎先将JSP翻译成一个_jspServlet(实质上也是一个servlet),然后按照servlet的调用方…

阿里90后工程师利用ARM硬件特性开启安卓8终端“上帝模式”

文/图 阿里安全潘多拉实验室 团控 编者按&#xff1a;团控&#xff0c;阿里安全潘多拉实验室研究人员&#xff0c;该实验室主要聚焦于移动安全领域&#xff0c;包括对iOS和Android系统安全的攻击和防御技术研究。团控的主攻方向为安卓系统级漏洞的攻防研究。在今年3月的BlackHa…

c语言模拟实现oc引用计数

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

ATT与Intel汇编语言的比较

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

最近,又发现了 Pandas 中三个好用的函数

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

Java Web的Maven项目中Properties文件的使用(2)

为什么80%的码农都做不了架构师&#xff1f;>>> 背景 Java Web中常用一些Properties文件进行部署配置&#xff0c;其中如果在里面配置OS的路径&#xff0c;需要跨平台&#xff0c;主要就是考虑win系统的路径是“\”&#xff0c;而Linux的路径是“&#xff0f;”。 …

TCP/IP 计算机网络协议

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

5分钟速通 AI 计算机视觉发展应用

作者 | 李秋键 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 计算机视觉是进步最大、发展最快的领域之一。根据 Global VIEW 的研究&#xff0c;全球计算机视觉市场规模在 2020 的价值为 113 亿 2000 万美元&#xff0c;预计从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日&#xff0c;在CES ASIA活动现场&#xff0c;上汽通用汽车凯迪拉克超级智能驾驶系统&#xff08;Super CruiseTM&#xff09;在国内首发亮相&#xff0c;未来将搭载在凯迪拉克CT6 40T铂金版车型上推向市场。高德地图作为上汽通用汽车在华合作伙伴&#xff0c;将为超级智…

WinDbg安装与使用

WinDbg是微软发布的一款相当优秀的源码级(source-level)调试工具&#xff0c;可以用于Kernel模式调试和用户模式调试&#xff0c;还可以调试Dump文件。 主页&#xff1a;http://msdn.microsoft.com/en-us/windows/hardware/gg463016 下载链接&#xff1a;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…

让假图无所遁形,阿里篡改图像检测大赛集结号令打响

近年来&#xff0c;伴随多媒体技术的迅速发展&#xff0c;图像安全隐患随之而来。一些不法分子通过伪造或恶意篡改证件、政府文件、转账记录截图等方式&#xff0c;不仅进行诈骗活动&#xff0c;还带来一些社会问题&#xff1a;2 月 10 日&#xff0c;广西柳州融水苗族自治县赵…

Apache网页优化之网页压缩

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

推荐阅读的多核编程技术书籍

多核编程技术好书推荐 多核程序设计技术——通过软件多线程提升性能 , 作 者&#xff1a; &#xff08;孟加拉&#xff09;阿克特&#xff08;Akhter&#xff0c;S.&#xff09;&#xff0c;&#xff08;美&#xff09;罗伯茨&#xff08;Roberts&#xff0c;J.&#xff09; 著…