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

还在用Matplotlib? 又一可视化神器Altair登场 | 技术头条

640?wx_fmt=png


作者 | Fernando Irarrázaval 

翻译 | Monanfei

责编 | Jane

出品 | Python 大本营(id:pythonnews)


【导语】如何将我们的数据以更好的形势呈现出来?擅长不同编程语言的程序员会选择各自技术范畴内成熟、好用的工具包,比如 R 语言的开发者最常使用的是 ggplot2,但它不支持 Python;以前 Python 语言的开发者使用最多的是 matplotlib,一个很强大的可视化库,不过它的局限也非常严重,制作交互式图表也是一件难事。今天要给大家推荐一个新的工具——Altair,一个 Vega-Lite 的包装器,也许这些概念你都还不没了解过,接下来我们就在下面的文章为大家作介绍。


ggplot2 是 R 的作图工具包,可以使用非常简单的语句实现非常复杂漂亮的效果。然而不幸的是,ggplot2 并不支持 Python。


在 Python 中,我们常使用 matplotlib 用于可视化图形,matplotlib是一个很强大的可视化库,但是它有着很严重的局限性。matplotlib 的使用非常灵活,这可以说的上是它的一个优点,但是当我们想为图形加一个小小的功能的时候,它的繁琐操作会让我们举步维艰。除此之外,matplotlib 的两种界面(面向对象界面、基于状态的界面)令人相当困惑,对于新手很不友好。即使对于多年使用 matplotlib 的人而言,他们也无法完全掌握这些操作。最后不得不说的是,用 matplotlib 制作交互式图表是一件相当困难的事情。


Altair 和图形语法


Altair 是 Vega-Lite 的包装器。Vega-Lite 是 JavaScript 的高级可视化库,它最最重要的特点是,它的API是基于图形语法的。


什么是图形语法呢?图形语法听起来有点像一个抽象的功能,值得注意的是,它是 Altair 和其他 Python 可视化库之间最主要的区别。Altair 符合我们人类可视化数据的方式和习惯,Altair 只需要三个主要的参数:


  • Mark. 数据在图形中的表达形式。点、线、柱状还是圆圈?

  • Channels. 决定什么数据应该作为x轴,什么作为y轴;图形中数据标记的大小和颜色。

  • Encoding. 指定数据变量类型。日期变量、量化变量还是类别变量?


基于以上三个参数,Altair 将会选择合理的默认值来显示我们的数据。


Altair 最让人着迷的地方是,它能够合理的选择颜色。如果我们在 Encoding 中指定变量类型为量化变量,那么 Altair 将会使用连续的色标来着色(默认为 浅蓝色-蓝色-深蓝色)。如果变量类型指定为类别变量,那么 Altair 会为每个类别赋予不同的颜色。(例如 红色,黄色,蓝色)


补充:Vega-Lite 有两种类型的类别变量:名义变量和序数变量。名义变量的集合中,各元素的排序阶数没有任何实际意义,例如大陆集合是欧洲,亚洲,非洲,美洲,大洋洲,他们的次序没有任何数值上的意义;序数变量的集合中,各元素的排序阶数是有实际意义的,例如亚马逊的评论可以是一星,二星,三星,四星或五星,星级的高低次序是由意义的。



让我们来看一个具体的例子,如下所示,我们组织了6个国家和它们所对应的人口数据,除此之外,还有相应的收入数据:



import pandas as pd	
import altair as alt	data = pd.DataFrame({'country_id': [1, 2, 3, 4, 5, 6],	'population': [1, 100, 200, 300, 400, 500],	'income':     [1000, 50, 200, 300, 200, 150]})



640?wx_fmt=png


首先我们绘制每个国家的人口数据:


首先我们绘制每个国家的人口数据:	
"""As we mentioned before, we need to define 3 parameters:	1. Mark: We do this by using "mark_circle".	2. Channel: We only define an x-axis and we map it to the population.	3. Encodings: We define both variables as quantitative by using :Q after the column name"""	categorical_chart = alt.Chart(data).mark_circle(size=200).encode(	x='population:Q',	color='country_id:Q')


640?wx_fmt=png      

从上图可以看出,Altair 选择了连续色标,在本例中这是没有意义的。问题的根源在于,我们将 country_id 定义为量化变量,而实际上,它应该是一个类别变量,修改代码如下:


# We changed color='country_id:Q' to color='country_id:N' to indicate it is a nominal variable	
categorical_chart = alt.Chart(data).mark_circle(size=200).encode(	x='population:Q',	color='country_id:N')


640?wx_fmt=png      

从图中可以看到,每个国家都用了不同的颜色表示。我们仅仅改变了变量 country_id 的编码,即用 N (Nominal 名义变量)替换了 Q (Quantitative 量化变量)。这点小小的改变就足以使得 Altair 明白,它不该使用连续色标,而是使用独立色标。


图表的扩展


Altair 的另一个美妙之处就是,我们可以从现有的图表中创建新的图表。例如,我们现在要加入新的数据 income,我们唯一需要做的就是告诉 Altair:用 income 作为y轴,代码如下所示:


categorical_chart = alt.Chart(data).mark_circle(size=200).encode(	x='population:Q',	y='income:Q',	color='country_id:N')


640?wx_fmt=png     

如果想添加数据提示的功能(tooltip,鼠标悬停在数据上时,会显示该数据的详细信息),只需要增加一行代码:


categorical_chart = alt.Chart(data).mark_circle(size=200).encode(	x='population:Q',	y='income:Q',	color='country_id:N',	tooltip=['country_id', 'population', 'income']))	


Altair 的迷人之处



在接触 Altair 之前,我们常常持有一种的怀疑态度:这些可视化工具的包装器真的好用吗?通常来讲,包装是一个坏主意,就拿 ggplot2 来说,它的很多包装器都没有被 Python 社区广泛采用。这些包装器很难创建功能完整的版本,而且它们的更新也常常不及时。然而 Altair 却不一样:


  • Altair 的 API 非常全面。这就要感谢 Jake Vanderplas(JVP)伟大的设计,凡是 Vega-Lite 能够做的,Python 就可以做。这是因为 Altair 只是一个 Python API,它能够生成有效的 Vega-Lite jsons,而 API 是以编程的方式生成的,因此在 Vega-Lite 的新版本发布后,Altair 能够全面而且快速的更新,这一切都显得如此美妙。


  • 直观且具有符合 Python 习惯的接口。就像使用其他的 Python 库一样,我们需要一些时间来习惯。但 Altair 的精彩之处在于,它所有的设置都符合人类的推理方式,这样我们就能很快的了解它内部的运作原理,并且因此而变得高效。


  • 互动性强。Vega-Lite 交互性非常强大,我们不仅能够使用一行代码来添加 tooltips,还能将图的选择区与另一个可视化图关联。     


  • 高度灵活性。Altair的marks可以理解为图表构建中的模块。如下图所示,我们用圆圈标记、线标记和文本标记的组合来构建一个图。最终的代码可读性强,而且易于修改,这对于 matplotlib 来说是很难的。  

     


    640?wx_fmt=png

         640?wx_fmt=png       

有点很多,同时也存在一些不足


Altair 的主要缺点


  • 没有 3d 绘图。如果3d可视化对您的工作很重要,那么 Altair 不太适合您。


  • Altair 不是 D3.js。就像许多的高级可视化框架一样,Altair 也不是 100% 可定制的,在某些时候,我们会遇到一些无法用Altair制作的图表。(注:D3.js 是一个 JavaScript 库,用于在 Web 浏览器中生成动态的交互式数据可视化。 它利用了广泛实施的 SVG,HTML5 和 CSS 标准,具有高度的可定制性)


  • 统计支持较差。如果需要对数据进行线性回归的话,还是推荐用 Seaborn 来进行快速可视化。


原文链接:

http://fernandoi.cl/blog/posts/altair/


(本文为 AI科技大本营转载文章,转载请联系原作者)



CTA核心技术及应用峰会


5月25-27日,由中国IT社区CSDN与数字经济人才发展中心联合主办的第一届CTA核心技术及应用峰会将在杭州国际博览中心隆重召开,峰会将围绕人工智能领域,邀请技术领航者,与开发者共同探讨机器学习和知识图谱的前沿研究及应用。


更多重磅嘉宾请识别海报二维码查看,目前会议早鸟票发售中(原票价1099元),点击阅读原文即刻抢购。添加小助手微信15101014297,备注“CTA”,了解票务以及会务详情。

640?wx_fmt=jpeg

推荐阅读

  • 从Pixel 3a到Android Q,一份谷歌AI能力的“成绩单” | Google I/O全程回顾

  • GitHub日收12000星,微软新命令行工具引爆程序员圈!

  • Python datetime指南:教你如何处理日期和时间(附试题+答案)

  • 从小白到入门算法,我的经验分享给你~

  • 开了个会:破局企业云通信,华为加速 Buff 开发者!

  • 独家! 币安被盗原因找到了! 7074枚比特币竟是这样丢掉的

  • 保送清华成博士,华为 12 年搞通信,他为何如此看待 5G ?| 人物志

  • 补偿100万?Oracle裁900+程序员,新方案已出!

  • 什么叫云原生应用?| 技术头条

  • @程序员,不加班就滚吧 | 程序员有话说

640?wx_fmt=png

相关文章:

【Live555】live555源码详解(六):FramedSource、RTPSource、RTPSink

【Live555】live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的三个类所在的位置: FramedSource、RTPSource、RTPSink 11、FramedSource FramedSource 继承自 MediaSource,下面是实现 FramedSource 的依赖关系图 使用 FramedSource 的关系图

maven在idea的配置

首先去官网下载如图: 下载之后解压打开如图: 配置:1、打开conf文件夹下的settings.xml(我用的notepad) 第55行左右加上图上的第150行左右在标签下面写上如图(阿里提供的存架包的仓库) 2、配置id…

Apache下实现禁止目录浏览

当我们访问某个网站时&#xff0c;在后面增加相应的目录&#xff0c;就可以浏览到目录&#xff0c;对于网站来说&#xff0c;是很不安全的。 解决办法&#xff1a;1、编辑httpd.conf文件vi ./conf/httpd.conf找到如下内容&#xff1a;......<Directory "C:/Program Fi…

【Live555】live555源码详解(七):GenericMediaServer、RTSPServer、RTSPClient

【Live555】live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的三个类所在的位置: GenericMediaServer、RTSPServer、RTSPClient 14、GenericMediaServer GenericMediaServer 继承自 Medium,依赖关系图如下: 使用 GenericMediaServer 的关系图:

200万?程序员刚拿下华为Offer,这些技巧你必须知道!

最近&#xff0c;有华为员工在匿名社交网站上&#xff0c;曝光自己年收入已突破200万&#xff01;消息一出&#xff0c;不知酸了多少中国程序员&#xff01;但是&#xff0c;在羡慕之余&#xff0c;我们不如利用起碎片时间&#xff0c;从点滴做起&#xff0c;背水一战&#xff…

有效快速的学习微信小程序

微信小程序 实现了应用“触手可及”的梦想&#xff0c;用户扫一扫或搜一下即可打开应用。不用安装&#xff0c;即开即用&#xff0c;用完就走。省流量&#xff0c;省安装时间&#xff0c;不占用桌面。对用户使用上来说&#xff0c;确实方便&#xff0c;没有繁琐的注册&#xff…

Delphi开发的IOCP测试Demo以及使用说明。

Delphi开发的IOCP&#xff0c;此为压力测试Demo和使用说明。

【Live555】live555源码详解(八):testRTSPClient

【Live555】live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的testRTSPClient实现的三个类所在的位置: ourRTSPClient、StreamClientState、DummySink 1、流程分析 1.1 设置使用环境 创建任务调度器和使用环境 TaskScheduler* scheduler = BasicTask…

ICML 2019:序列到序列自然语言生成任务超越BERT、GPT!微软提出通用预训练模型MASS | 技术头条...

来源 | 微软研究院AI头条&#xff08;id&#xff1a;MSRAsia&#xff09;责编 | Jane编者按&#xff1a;从2018年开始&#xff0c;预训练&#xff08;pre-train&#xff09; 毫无疑问成为NLP领域最热的研究方向。借助于BERT和GPT等预训练模型&#xff0c;人类在多个自然语言理解…

linux 命令详解 二十七

4. 循环语句: Bash Shell中主要提供了三种循环方式&#xff1a;for、while和until。 for循环声明格式&#xff1a; for variable in word_list do command done 见如下示例脚本&#xff1a; /> cat > test7.sh for score in math engl…

【Live555】live555源码详解系列笔记

【Live555】liveMedia下载、配置、编译、安装、基本概念 【Live555】live555源码详解(一):BasicUsageEnvironment、UsageEnvironment 【Live555】live555源码详解(二):BasicHashTable、DelayQueue、HandlerSet 【Live555】live555源码详解(三):Groupsock 【Live555】l…

android 每个块半径不同的扇形图,自定义view

1.首先看效果图 2.自定义PieChartView&#xff0c;继承自View&#xff0c;下边为PieChartView代码 package com.yingjinbao.im.peach.customview;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint…

人工智能的浪潮中,知识图谱何去何从?

漆桂林认为&#xff0c;目前知识图谱整个领域最关注的问题还是如何能够高效、低成本构建知识图谱&#xff0c;而这个问题对于研究人员来说&#xff0c;仍是一个非常大的挑战&#xff0c;比如现在大家都在关注如何在少量甚至无标注场景下进行知识图谱构建。 记者 | Jane 责编 |…

布Sendmail之网,安全则不漏(上)

Sendmail是一种古老的邮件服务器&#xff0c;但是它仍然存在着种种问题&#xff0c;最大的问题就是安全问题。由于Sendmail邮件服务器占据了很大的市场份额&#xff0c;因此&#xff0c;提高Sendmail的安全性就显得格外重要了。本篇拟从证书、Starttls、Sasl技术来探讨Sendmail…

英伟达发布新型GAN,豹子秒变沙皮狗!| 技术头条

作者 | 刘静编译 | 李尔客转自自图灵TOPIA&#xff08;ID:turingtopia&#xff09;5月9日&#xff0c;英伟达首席研究科学家刘明宇在社交网站公布了其最新研究成果&#xff1a;一种新型的GAN&#xff0c;在测试期间只需几张示例图像&#xff0c;就可以将图像转换为以前从未见过…

【Live555】live555源码详解(九):ServerMediaSession、ServerMediaSubsession、live555MediaServer

【Live555】live555源码详解系列笔记 继承协作关系图 下面红色表示本博客将要介绍的三个类所在的位置: ServerMediaSession、ServerMediaSubsession、DynamicRTSPServer DynamicRTSPServer是live555MediaServer中实现的类,用来创建RTSP服务器 17、ServerMediaSession Se…

windows下mysql和linux下mysql主从配置

1. linux下mysql安装版本5.6 windows下mysql版本5.7 不要问我为什么版本不一致 就是想这么搞 2. linux为主服务器 windows为从服务器 3.找到liunx下mysql配置文件 添加如下 然后重新启动 4.添加复制用户 5.查看master状态&#xff0c;记录下两个参数 mysql> show mas…

myeclipse快捷键大全

1.转变大写&#xff1a;ctrlshiftx; 2.转变小写&#xff1a;ctrlshifty; 3.关闭当前窗口&#xff1a;ctrlw; 4.关闭所有的窗口&#xff1a;ctrlshiftw; 5.帮助提示&#xff1a;这个可以选择自己喜欢的键位组合&#xff1a;我比较喜欢ctrlenter; 6.复制当前行&#xff1a;ctrlal…

算力觉醒后,智慧距离勃发就只差一个想法

“太阳把自己的能量以光的形式洒向地面&#xff0c;让植物得以利用光合作用生长成熟&#xff1b;繁茂的草木不仅为动物们提供了栖息的家园&#xff0c;更将太阳的馈赠化为甜蜜的果实&#xff0c;在滋养万灵的同时把自己对未来的希望变成种子&#xff0c;播撒到远方……形成下一…

【Ubuntu】将Ubuntu的源改为国内源

1、备份源 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak2、查询系统代号 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.1 LTS Release: 20.04 Codename: focal我在Ubuntu20.4上做的测试&#xff0c;Ubun…

浏览器缓存和webpack缓存配置

网络请求会耗费大量时间和请求&#xff0c;如果可以重用为改变的网络资源&#xff0c;对于用户来说可以更快更流畅的查看网页&#xff0c;对于服务器来说减少了很多负荷&#xff0c;所以浏览器缓存是前端优化的重要内容。本文介绍了浏览器缓存的机制和缓存在webpack中的应用。 …

ipsec ***野蛮模式应用

IPSEC野蛮模式&#xff1a;简介&#xff1a;IKE 的协商模式 在RFC2409&#xff08;The Internet Key Exchange &#xff09;中规定&#xff0c;IKE 第一阶段的协商可以采用两种模式&#xff1a;主模式&#xff08;Main Mode &#xff09;和野蛮模式&#xff08;Aggressive Mode…

漫画:什么是LRU算法?

本期封面作者&#xff1a;A17————— 两个月前 —————用户信息当然是存在数据库里。但是由于我们对用户系统的性能要求比较高&#xff0c;显然不能每一次请求都去查询数据库。所以&#xff0c;小灰在内存中创建了一个哈希表作为缓存&#xff0c;每次查找一个用户的时候…

第15章节-Python3.5-Django实现用户登录与前端交互2 14

目的我想登陆成功后显示我的后台管理(实现过程): 新建home.html 在templates目录下代码如下: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body style"…

【GLib】GLib学习笔记(一):GLib、GObject、GType

1、GLib GLib是 Gtk 库和 Gnome 的基础。glib 可以在多个平台下使用&#xff0c;比如 Linux、Unix、Windows 等。GLib为许多标准的、常用的 C 语言结构提供了相应的替代物。 GLib是GTK的基础库&#xff0c;它由基础类型、对核心应用的支持、实用功能、数据类型和对象系统五个…

tomcat配置tomcat-redis-session-manager

为什么80%的码农都做不了架构师&#xff1f;>>> 今天写了半天程序&#xff0c;有点乏了。想想来配置一下tomcat-redis-session-manager吧&#xff0c;但是按照 官方文档配了总是tomcat启动错误。 java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/Ge…

链式比较、奇怪的字母、有趣的import...Python冷知识(六)

本文转载自Python编程时光&#xff08;ID:Python-Time&#xff09;冷知识系列&#xff0c;已经更新至第六篇。谈谈 Python 那些不为人知的冷知识&#xff08;一&#xff09;谈谈 Python 那些不为人知的冷知识&#xff08;二&#xff09;谈谈 Python 那些不为人知的冷知识&#…

【GLib】GLib学习笔记(二):源码编译

一、源码下载 http://ftp.acc.umu.se/pub/GNOME/sources/glib/本人下载是最新版本(截至2020-08-26)&#xff1a;glib-2.65.2.tar.xz 二、安装依赖 1、安装依赖库 sudo apt install cmake sudo apt install zlib1g-dev sudo apt install meson sudo apt install ninja sudo …

java之类和对象

概述 面向过程&#xff1a;面向过程主要是把问题分解成多个不同的步骤&#xff0c;然后把各个步骤变成方法&#xff0c;它更强调过程。代表语言&#xff1a;c 面向对象&#xff1a;面向对象会把问题分解成各个对象&#xff0c;然后各个对象之间进行交互&#xff0c;每个对象内部…

【GLib】GLib学习笔记(三):gtypes、garray、gerror、goption

1、类型&#xff1a;glib/gtypes.h 1.1 基本类型&#xff1b; typedef char gchar; typedef short gshort; typedef long glong; typedef int gint; typedef gint gboolean;typedef unsigned char guchar; typedef unsigned short gushort; typedef unsigned lo…