数据可视化库Altair的使用

Altair是基于Vega-Lite的Python下的声明式统计可视化库。

通过Altair,可以将更多的时间花在理解数据及其含义上。Altair的API非常简单和友好,它基于Vega-Lite可视化语法构建,这使得可以使用少量的代码构造出优雅高效的可视化结果。

Altair的安装

最简单的安装方式无疑是使用pip进行安装:

pip install altair

Altair的使用

输入数据

Altair内部使用的数据以Pandas中的Dataframe格式存储,但有以下三种方式传入:

  1. 以Pandas的DataFrame格式传入;
    data = pd.DataFrame({'x': ['A', 'B', 'C', 'D', 'E'],
                         'y': [5, 3, 6, 7, 2]})
    
  2. 以Data对象传入;
    data = alt.Data(values=[{'x': 'A', 'y': 5},
                        {'x': 'B', 'y': 3},
                        {'x': 'C', 'y': 6},
                        {'x': 'D', 'y': 7},
                        {'x': 'E', 'y': 2}])
    
  3. 以指向csv或json文本的url传入;
    data = 'https://vega.github.io/vega-datasets/data/cars.json'
    

最终数据将作为Chart、LayeredChart或FacetedChart对象的第一个参数传入。

图形选择

定义好数据之后,首先需要做的就是选择需要显示的图形,即将数据以何种形式显示,目前Altair中有如下几种类型可供选择:

Mark Name Method Description
area mark_area() A filled area plot.
bar mark_bar() A bar plot.
circle mark_circle() A scatter plot with filled circles.
line mark_line() A line plot.
point mark_point() A scatter plot with configurable point shapes.
rule mark_rule() A vertical or horizontal line spanning the axis.
square mark_square() A scatter plot with filled squares.
text mark_text() A scatter plot with points represented by text
tick mark_tick() A vertical or horizontal tick mark.

编码方式

编码方式定义了图片显示的各种属性,如每个图片的位置,图片轴的属性等:

通道选择

位置通道定义了图片中位置相关的属性:

Channel Altair Class Description
column Column The column of a faceted plot
row Row The row of a faceted plot
x X The x-axis value
y Y The y-axis value

通道描述:

Channel Altair Class Description
color Color The color of the mark
opacity Opacity The opacity of the mark
shape Shape The shape of the mark
size Size The size of the mark

通道排序:

Channel Altair Class Description
order Order -
path Path -

通道域信息:

Channel Altair Class Description
text Text The text to display at each mark
detail Detail Additional level of detail for a grouping, without mapping to any particular channel
label Label

数据类型

定义数据如何在图片中显示:

Data Type Shorthand Code Description
quantitative Q a continuous real-valued quantity
ordinal O a discrete ordered quantity
nominal N a discrete unordered category
temporal T a time or date value

分类与聚合

Aggregate Description
sum Sum of values
mean Arithmetic mean of values
average Arithmetic mean of values
count Total number of values
distinct Number of distinct values
variance Variance of values
variancep ??
stdev Standard Deviation of values
stdevp ??
median Median of values
q1 First quartile of values
q3 Third quartile of values
modeskew ??
min Minimum value
max Maximum value
argmin Index of minimum value
argmax Index of maximum value
values ??
valid ??
missing ??

分类与聚合定义了数据在显示之前的处理方式:

Aggregate Description
sum Sum of values
mean Arithmetic mean of values
average Arithmetic mean of values
count Total number of values
distinct Number of distinct values
variance Variance of values
variancep ??
stdev Standard Deviation of values
stdevp ??
median Median of values
q1 First quartile of values
q3 Third quartile of values
modeskew ??
min Minimum value
max Maximum value
argmin Index of minimum value
argmax Index of maximum value
values ??
valid ??
missing ??

简写方式

一些常用的属性值可以简写:

Shorthand Equivalent long-form
x='name' X('name')
x='name:Q' X('name', type='quantitative')
x='sum(name)' X('name', aggregate='sum')
x='sum(name):Q' X('name', aggregate='sum', type='quantitative')

数据展示

Jupyter展示

本质上Altair只是将数据转换为Vega-Lite所使用的Json格式,可以通过如下方式查看:

print(chart.to_json(indent=2)) 

通常情况下都是在Jupyter中展示数据:

c = alt.Chart(...)
c

或者使用IPython的display()方法进行展示:

c = alt.Chart(...)
display(c)

或者:

c = alt.Chart(...)
c.display()

WebServer展示

通过Web方式展示如下:

chart.serve()   

存储为图片

目前Altair不支持存储为图片,要将其存储为图片则需要使用到Nodejs的包。

存储为HTML文件

具体代码如下:

chart.savechart('plot.html')  

其他表现形式

Altair图标可以表示为HTML、Python字典、Json对象和Altair的chart,在这些对象之间转换的函数有:

  • Chart.to_dict() / Chart.from_dict()
  • Chart.to_json() / Chart.from_json()
  • Chart.to_html()
  • Chart.to_python()

相关资源

  1. Altair源码:
    https://github.com/altair-viz/altair
  2. Altair文档:
    https://altair-viz.github.io/
  3. Vega-Lite源码:
    https://github.com/vega/vega-lite
  4. Vega-Lite文档:
    https://vega.github.io/vega-lite/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容