Altair-一个被名字耽误的超强交互式可视化库

今天的推文我们介绍一个功能很强,但知名度不如Matplotlib、pyecharts等静态或者交互式可视化库-Altair。Altair是基于Vega和Vega-Lite的Python数据统计可视化库,其优秀的交互、数据统计功能和清新的配色,很难让人用过就忘记(唯一不好就是名字太难记啦!)。今天,我们就系统介绍下Altair包的基本绘图流程。主要内容如下:

  • Altair绘图三大主要步骤

  • Altair样例

  • 更多详细的数据可视化教程,可阅读我们的课程店铺:

Altair绘图三大主要步骤

在绘制可视化作品之前,我们需要导入绘图所需的数据,Altair库的数据导入格式是标准的Pandas.Dataframe类型,这也很大程度上完善了Python 数据可视化流程化过程,省去了数据转换的过程。好了,介绍完所需要的数据类型,接下里就详细介绍Altair可视化主要的「三大步骤」

Chart Object)对象转换

在进行Altair可视化绘制时,我们要将之前读取的的数据转换成可被Altair接受的绘图对象,这时候,我们需要调用Altair库的Chart() 方法将数据转换成Altair的Chart对象。这一步骤也是必须和操作的,大家直接记住即可,下面是一个参考样例:

import altair as alt
chart = alt.Chart(data) # data为要绘制的数据,Dataframe类型

Encodings and Marks

在生成图表对象之后,就可以根据数据指定我们希望绘制的可视化作品啦。 Altair库通过图表对象(Chart Object)mark属性完成的,即可以通过Chart.mark_ *方法获取多种图表格式。如我们可以使用 mark_point() 来绘制点图,代码如下:

alt.Chart(data).mark_point()

除了mark_point()绘图函数外,Altair提供的其他表格类型如下表:

Chart.mark_ *

除此之外,Altair还提供给了组合图,即我们熟悉的统计类图表,如下:

Compound marks

当然,我最喜欢的一个绘图功能是下面这一个:*直接填充图片(根据赋值的x、y坐标信息)*,就可以实现图片的填充效果图了,生成例如男女比例小头像的的统计图表怎会更加立体形象,举例如下:

import altair as alt
import pandas as pdsource = pd.DataFrame.from_records([{"x": 0.5, "y": 0.5, "img": "https://vega.github.io/vega-datasets/data/ffox.png"},{"x": 1.5, "y": 1.5, "img": "https://vega.github.io/vega-datasets/data/gimp.png"},{"x": 2.5, "y": 2.5, "img": "https://vega.github.io/vega-datasets/data/7zip.png"}
])alt.Chart(source).mark_image(width=50,height=50
).encode(x='x',y='y',url='img'
)

可视化结果如下:

mark_image example

要想对各类mark进行定制化操作,Altair也提供了大量可以进行定制化操作的Mark Properties (属性),除了比较常见的颜色(color)、填充(fill)、大小(size)、透明度(opacity)、形状(shape)外,还提供大量的其他属性,用于灵活构建自己的可视作品,更多详细的内容,小伙伴们可以参考其官网哈,如下:https://altair-viz.github.io/user_guide/marks.html

在选择完我们的mark对象后,接下来我们要做的就是如何将数据进行映射,比如,我绘制散点图,我需要将数据中的哪一列映射到X轴,哪一列映射到Y轴呢?这时候就需要用到Altair的Chart.encode() 方法。

Encode() 方法可直接将如坐标轴(x,y),颜色,形状,大小等图表属性通过pandas dataframes数据中的列名建立映射关系。比如下面这个例子就是将a列映射到X轴,b列y映射到Y轴的散点图:

alt.Chart(data).mark_point().encode(x='a',y='b'
)

更多encode()方法,大家可以参照以下网址进行了解: https://altair-viz.github.io/user_guide/encoding.html

在完成以上步骤后,你就可以使用Altair库进行基本图表的绘制了,当然,如果你想进行更加快速绘图(包括数据处理),Altair也提供了用于数据处理转换的Aggregation方法,该方法可以在绘制图表过程中直接对数据进行如求平均、求和等聚合数据操作。比如,还是上边的例子,我们希望将b列的均值映射到Y轴上,常规操作是先对数据进行转换计算再进行 可视化绘制,这里我们可以直接通过以下代码完成数据处理-绘图操作:

alt.Chart(data).mark_bar().encode(x='a',y='average(b)'
)

我们还可以通过以下方式来添加刻度轴名称、图例等绘图属性:

alt.Chart(data).mark_bar(color='firebrick').encode(alt.Y('a', title='category'),alt.X('average(b)', title='avg(b) by category')
)

其中:alt.Y、alt.X 方法则可以添加title、label等属性。

保存结果(Saving Altair Charts)

由于Altair为交互式的可视化库(基于JS),其保存绘制结果的格式也相对较多,这里我们列举一下即可:

import altair as altchart = alt.Chart(data.cars.url).mark_point().encode(x='',y='',color=''
)
# 保存json格式
chart.save('chart.json')
# 保存HTML 网页格式
chart.save('chart.html')
# 保存png格式
chart.save('chart.png')
# 保存svg格式
chart.save('chart.svg')
# 保存pdf格式
chart.save('chart.pdf')

其中保存png格式时还可以设置scale_factor属性,修改charts 大小或者分辨率,scale_factor默认大小为1.

chart.save('chart.png', scale_factor=2.0)

Altair样例

介绍完Altair基本的绘图步骤后,这一部分,我们列举几个优秀的可视化作品供大家欣赏。

「样例一」:London Tube Lines

import altair as alt
from vega_datasets import databoroughs = alt.topo_feature(data.londonBoroughs.url, 'boroughs')
tubelines = alt.topo_feature(data.londonTubeLines.url, 'line')
centroids = data.londonCentroids.urlbackground = alt.Chart(boroughs).mark_geoshape(stroke='white',strokeWidth=2
).encode(color=alt.value('#eee'),
).properties(width=700,height=500
)labels = alt.Chart(centroids).mark_text().encode(longitude='cx:Q',latitude='cy:Q',text='bLabel:N',size=alt.value(8),opacity=alt.value(0.6)
).transform_calculate("bLabel", "indexof (datum.name,' ') > 0  ? substring(datum.name,0,indexof(datum.name, ' ')) : datum.name"
)line_scale = alt.Scale(domain=["Bakerloo", "Central", "Circle", "District", "DLR","Hammersmith & City", "Jubilee", "Metropolitan", "Northern","Piccadilly", "Victoria", "Waterloo & City" ],range=["rgb(137,78,36)", "rgb(220,36,30)", "rgb(255,206,0)","rgb(1,114,41)", "rgb(0,175,173)", "rgb(215,153,175)","rgb(106,114,120)", "rgb(114,17,84)", "rgb(0,0,0)","rgb(0,24,168)", "rgb(0,160,226)", "rgb(106,187,170)"])lines = alt.Chart(tubelines).mark_geoshape(filled=False,strokeWidth=2
).encode(alt.Color('id:N',legend=alt.Legend(title=None,orient='bottom-right',offset=0))
)background + labels + lines

可视化结果如下:

London Tube Lines

「样例二」:Natural Disasters

import altair as alt
from vega_datasets import datasource = data.disasters.urlalt.Chart(source).mark_circle(opacity=0.8,stroke='black',strokeWidth=1
).encode(alt.X('Year:O', axis=alt.Axis(labelAngle=0)),alt.Y('Entity:N'),alt.Size('Deaths:Q',scale=alt.Scale(range=[0, 4000]),legend=alt.Legend(title='Annual Global Deaths')),alt.Color('Entity:N', legend=None)
).properties(width=450,height=320
).transform_filter(alt.datum.Entity != 'All natural disasters'
)

可视化结果:

Natural Disasters

「样例三」:One Dot Per Zipcode

import altair as alt
from vega_datasets import data# Since the data is more than 5,000 rows we'll import it from a URL
source = data.zipcodes.urlalt.Chart(source).transform_calculate("leading digit", alt.expr.substring(alt.datum.zip_code, 0, 1)
).mark_circle(size=3).encode(longitude='longitude:Q',latitude='latitude:Q',color='leading digit:N',tooltip='zip_code:N'
).project(type='albersUsa'
).properties(width=650,height=400
)

One Dot Per Zipcode

更多其他优秀的可视化作品,大家可前往altair官网进行查看: https://altair-viz.github.io/gallery/index.html

总结

今天我们介绍了一个优秀的Python交互式可视化包-Altair,其丰富的图表类型和灵活的定制化函数,相信一定能够让大家绘制出自己的可视化作品。以上内容只是简单对Altair包绘图过程进行了总结,主要都是我在使用该库进行绘图时所认为的关键步骤,可能有所缺漏,更多内容大家可参考Altair官网。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/776328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年的黑马项目,在视频号上开小店,这个机会不容错过!

大家好,我是电商小布。 在互联网的快速发展下,电商这一行可以说是展现出来了前所未有的生机。 也造就了越来越多项目的产生,视频号小店就是其中之一。 有人说,就今年的各大项目情况来看,视频号小店无疑是最大的黑马…

jsp将一个文本输入框改成下拉单选框,选项为字典表配置,通过后端查询

一,业务场景: 一个人员信息管理页面,原来有个最高学历是文本输入框,可以随意填写,现在业务想改成下拉单选框进行规范化,在专科及以下、本科、研究生三个选项中选择; 二,需要解决问…

【Linux】 gcc(linux下的编译器)程序的编译和链接详解

目录 前言:快速认识gcc 1. 程序的翻译环境和执行环境 2.编译和链接 2.1翻译环境 2.2编译环境 1. 预处理 gcc -E指令 test.c(源文件) -o test.i(生成在一个文件中,可以自己指定) 预处理完成之后就停下来&am…

LeetCode 1027——最长等差数列

阅读目录 1. 题目2. 解题思路3. 代码实现 1. 题目 2. 解题思路 假设我们以 f[d][nums[i]]表示以 nums[i] 为结尾元素间距为 d 的等差数列的最大长度,那么,如果 nums[i]-d 也存在于 nums 数组中,则有: f [ d ] [ n u m s [ i ] ] …

解决vim中NERDTree图标是问号或者乱码问题

解决vim中NERDTree图标是问号或者乱码问题 乱码信息如图解决办法1. 安装字体下载字体安装字体Ubuntu系统Windows11系统 2. 控制台修改字体Ubuntu系统Windows11系统 乱码信息如图 Ubuntu系统上的情况 使用windows控制台连接的情况 解决办法 1. 安装字体 下载字体 在nerd f…

51单片机学习9 串口通讯

51单片机学习9 串口通讯 一、串口通讯简介UARTSTC89C51RC/RD的串口资源 二、51单片机串口介绍1. 内部结构2. 寄存器(1)串口控制寄存器SCON(2)电源控制寄存器PCON 3. 计算波特率4. 串口配置步骤 三、 开发示例1. 硬件电路2. 代码实…

网络面试——浏览器输入url到显示主页的过程

浏览器输入URL到显示主页的过程通常可以分为以下步骤: 1. **URL解析**: - 当用户在浏览器的地址栏中输入URL时,浏览器会首先对该URL进行解析。 - 解析URL包括识别协议(例如HTTP、HTTPS)、主机名(例如…

YOLOv5-小知识记录(一)

0. 写在前面 这篇博文主要是为了记录一下yolov5中的小的记忆点,方便自己查看和理解。 1. 完整过程 (1)Input阶段,图片需要经过数据增强Mosaic,并且初始化一组anchor预设; (2)特征提…

MSA7T10 DVBT2高清机顶盒方案

一、方案描述 MSA7T10系列芯片是Mstar推出的极富竞争力的DVB-T2机顶盒FTA方案,芯片内置64MB DDR2和T2解调器,支持T2 1.3.1规范,支持HEVC,H.264,MPEG高清视频,支持PVR/Timeshit功能,支持各种多媒…

曲线生成 | 图解Reeds-Shepp曲线生成原理(附ROS C++/Python/Matlab仿真)

目录 0 专栏介绍1 什么是Reeds-Shepp曲线?2 Reeds-Shepp曲线的运动模式3 Reeds-Shepp曲线算法原理3.1 坐标变换3.2 时间翻转(time-flip)3.3 反射变换(reflect)3.4 后向变换(backwards) 4 仿真实现4.1 ROS C实现4.2 Python实现4.3 Matlab实现 0 专栏介绍 &#x1f5…

如何利用社媒群组如何高效开发国外客户

现在社媒营销也是越来越流行了,很多外贸人都开始做社媒营销。社媒营销相对来说是比较有温度的一个营销,因为大部分社媒平台都支持在线聊天,触达的即时性是比较高的,效果也比传统的一些方法要好一些。 当然做社媒也是有难度的&…

西藏实景三维技术研讨交流会成功举办

2024年3月21-22日,西藏自治区“实景三维技术研讨交流会”在拉萨成功举办。 本次会议由西藏自治区自然资源厅、自然资源部重庆测绘院指导,西藏自治区测绘学会、西藏自治区地理信息产业协会主办,武汉大势智慧科技有限公司(后简称“…

数据库-索引快速学

索引 当表中数据量庞大时,往往搜索一条数据就会耗费很长的时间等待 索引是帮助数据库高效获取数据的数据结构 create index 索引名 on 数据表名(字段名);为该表下的某一字段创建索引,检索耗时会大大的减小 索引的优缺点 优点&…

【Python BUG】CondaHTTPError解决记录

问题描述 CondaHTTPError: HTTP 429 TOO MANY REQUESTS for url https://mirrors.ustc.edu.cn/anaconda/pkgs/free/win-64/current_repodata.json Elapsed: 00:26.513315 解决方案 找到用户路径下的 .condarc文件,建议用这个方法前和我一样做个备份,方…

python中类的导入与使用

1、类的介绍 与C中面向对象思想类似,有时候为了方便,需要专门创建一个类,将相关的函数全部写入到该类中,方便后续创建对象,再使用类中函数。那么如何创建完类,在其他文件中使用类中函数,这是这篇…

Python Flask框架 -- flask-migrate迁移ORM模型

# 之前使用的这个db.create_all()很有局限性,它不能把在class里修改的东西同步上数据库,所以不用了 # with app.app_context(): # 请求应用上下文 # db.create_all() # 把所有的表同步到数据库中去 例如,在User类中增加一个email字段&…

STM32和GD32内部时钟与外部时钟讲解

STM32F103为例: 1. 当 HSI 被用作 PLL 时钟输入时,可以实现的最大系统时钟频率为 64 MHz。 2. 要使 USB 功能可用,必须同时启用 HSE 和 PLL,并使 USBCLK 运行在 48 MHz。 3. 要实现 ADC 转换时间为 1 s,APB2 必须为 14 MHz、28 MHz 或 56 MHz。 ①. HSE = 高速外部时钟信号…

[linux初阶][vim-gcc-gdb] OneCharter: vim编辑器

一.vim编辑器基础 目录 一.vim编辑器基础 ①.vim的语法 ②vim的三种模式 ③三种模式的基本切换 ④各个模式下的一些操作 二.配置vim环境 ①手动配置(不推荐) ②自动配置(推荐) vim是vi的升级版,包含了更加丰富的功能. ①.vim的语法 vim [文件名] ②vim的三种模式 命令…

爬取搜狗翻译项目实例

视频中讲解的是百度翻译,但是视频中的方法现在已经不适用了,因为他们对 URL 的参数进行了修改,导致没法直接修改参数来爬取对应的翻译结果,这里我使用搜狗翻译来做演示,原理是一样的。 我们搜索的关键字会返回在 URL 中…

家用超声波清洗机高端品牌推荐!4款值得入手的热门超声波清洗机

急着洗眼镜的朋友先不要慌,虽然洗眼镜是日常生活中最常见的操作,但是在清洗眼镜方面也是有讲究的,不是随随便便把眼镜擦一下就算清洁干净了!因为我们拿眼镜布擦眼镜的时候,布料粗糙的微粒就会跟砂纸一样打磨着镜片&…