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()
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | import altair as altfrom 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() :绘制条形图
| 12
 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()
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | import altair as altfrom 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(),则画出来的只有一个点
| 12
 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'
 )
 
 | 
| 12
 3
 4
 
 | alt.Chart(data).mark_point().encode(x='a',
 y='b'
 )
 
 | 
| 12
 3
 4
 5
 
 | alt.Chart(data).mark_point().encode(
 x='average(b)',
 y='a'
 )
 
 | 
| 12
 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() :将图片保存为指定格式
| 12
 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格式
| 12
 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:轴标题
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 
 | import pandas as pdimport 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')
 )
 
 | 
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | import pandas as pddata = 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')
 )
 
 
 
 
 | 
参考资料