A Grammar of Interactive Graphics
Altair
Altair是Python的一个可视化库,由华盛顿大学的数据科学家Jake Vanderplas编写。
安装:
Altair中的基本对象是 Chart,它将数据框(DataFrame)作为单个参数。
Chart有三个基本方法:
- 数据data
- 标记mark :可以让用户在图中以不同形状来表示数据点(如实心点、空心圆、方块等)
- 编码encode :指定图像的具体内容
标记和编码决定着绘制图表的样式
常用的编码encode有:
x
:x轴数值
y
:y轴数值
color
:标记点的颜色
opacity
:标记点的透明度
shape
:标记点的形状
size
:标记点的大小
row
:按行分布图片
column
:按列分布图片
绘图
面积图 mark_area()
1 2 3 4 5 6 7 8 9 10
| import altair as alt from vega_datasets import data
source = data.iowa_electricity()
alt.Chart(source).mark_area().encode( x="year:T", y="net_generation:Q", color="source:N" )
|
条形图 mark_bar()
mark_bar() :绘制条形图
1 2 3 4 5 6 7 8 9 10 11 12
| import pandas as pd
data = pd.DataFrame({ 'a': list('AAABBBBDDDDEE'), 'b': [2, 7, 4, 1, 2, 6, 8, 4, 7, 5, 12, 11, 10] })
import altair as alt alt.Chart(data).mark_bar().encode( x='a', y='average(b)' )
|
地图 mark_geoshape()
mark_geoshape() :地理形状图
mark_image()
mark_image() :将图片绘制在坐标系中
线图 mark_line()
1 2 3 4 5 6 7 8 9 10
| import altair as alt from vega_datasets import data
source = data.stocks()
alt.Chart(source).mark_line().encode( x='date', y='price', color='symbol' )
|
散点图 mark_point()
mark_point()
:绘制散点图
- 如果只指定
mark_point()
,则画出来的只有一个点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| import pandas as pd
data = pd.DataFrame({ 'a': list('AAABBBBDDDDEE'), 'b': [2, 7, 4, 1, 2, 6, 8, 4, 7, 5, 12, 11, 10] })
import altair as alt chart = alt.Chart(data)
alt.Chart(data).mark_point()
alt.Chart(data).mark_point().encode( x='a' )
|
1 2 3 4
| alt.Chart(data).mark_point().encode( x='a', y='b' )
|
1 2 3 4 5
| alt.Chart(data).mark_point().encode( x='average(b)', y='a' )
|
1 2 3 4 5 6 7 8 9 10 11
| import altair as alt from vega_datasets import data
cars = data.cars()
alt.Chart(cars).mark_point().encode( x='Horsepower', y='Miles_per_Gallon', color='Origin', ).interactive()
|
点击“…”可选择将图片保存为PNG图片格式;鼠标移至图片区域,向下滑动鼠标可缩小数据点,向上滑动鼠标可放大数据点。
save()
save() :将图片保存为指定格式
1 2 3 4 5 6
| chart = alt.Chart(data).mark_bar().encode( x='a', y='average(b)', ) chart.save('chart.html')
|
to_json()
to_json() :输出为JSON格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| chart = alt.Chart(data).mark_bar().encode( x='a', y='average(b)', ) print(chart.to_json())
|
X(), Y()
X()
:设置x轴的聚合函数aggregate、field、数据类型type
Y()
:设置y轴的聚合函数aggregate、field、数据类型type
- 参数
aggregate
:设置聚合函数
- 参数
type
:轴数据类型
- 参数
title
:轴标题
1 2 3 4 5 6 7 8 9 10 11 12
| import pandas as pd import altair as alt
data = pd.DataFrame({ 'a': list('AAABBBBDDDDEE'), 'b': [2, 7, 4, 1, 2, 6, 8, 4, 7, 5, 12, 11, 10] })
alt.Chart(data).mark_bar().encode( alt.Y('a', type='nominal'), alt.X('b', type='quantitative', aggregate='average') )
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| import pandas as pd data = pd.DataFrame({ 'a': list('AAABBBBDDDDEE'), 'b': [2, 7, 4, 1, 2, 6, 8, 4, 7, 5, 12, 11, 10] })
alt.Chart(data).mark_bar(color='firebrick').encode( alt.Y('a', title='category'), alt.X('average(b)', title='avg(b) by category') )
|
参考资料