pip install altair
与安装其他第三方库的方法一致。
开始绘制图表Altair的基本对象是Chart,它将数据框作为单个参数,依靠以下代码定义:
import altair as alt chart = alt.Chart(data)
Chart有三个基本方法:数据(data)、图表类型(mark)和编码(encode),使用它们的格式如下:
数据(data)数据顾名思义,直接导入数据框的数据。
Altair 统计图表在实际使用中主要围绕 Pandas Dataframe 构建的。因此想要利用Altair需要有一定的Pandas使用基础。(孙兴华老师的Pandas教程)
导入 Pandas 并创建一个简单的 DataFrame 进行可视化,a 列中有一个分类变量,b 列有一个数值变量:
import pandas as pd
data = pd.DataFrame({'a': list('CCCDDDEEE'),
'b': [2, 7, 4, 1, 2, 6, 8, 4, 7]})
图表类型(mark)
mark属性指定了数据在在图上应以怎样的方式精确展示。
有了alt.Chart(data)图表对象,现在可以指定我们想要的数据可视化图表类型。通过mark可以方便地访问该属性Chart.mark_*。例如,我们可以使用Chart.mark_point将数据显示为一个点:
alt.Chart(data).mark_point()
这些代码产生的渲染图由data中每一行数据产生,在我们没有为这些点指定位置前,所有的点都重叠在一起。
编码(encode)创建有意义的数据可视化图表的关键是将数据的属性映射到可视属性,以便有效地传达数据中的信息。为了把mark渲染的点分离开,在 Altair 中,这种视觉属性到数据列的映射称为编码,并且最常通过Chart.encode() 方法表示。
alt.Chart(data).mark_point().encode(
x='a',
)
encode()方法在数据和图表属性之间的映射关系,例如:x轴、y轴、颜色、形状、大小……(x, y, color, shape, size…)
刚刚我们分离了'a',现在增加一个映射到纵坐标的编码通道分离'b'
alt.Chart(data).mark_point().encode(
x='a',
y='b'
)
可以看到对于指定为 Dataframe 的数据,Altair 可以自动确定每种编码的正确数据类型,并创建适当的比例和图例来表示数据。
数据转换:聚合为了在数据可视化方面提供更大的灵活性,Altair 具有用于聚合数据的内置语法。例如,我们可以通过在某一列中使用聚合来计算所有值的平均值:
alt.Chart(data).mark_point().encode(
x='a',
y='average(b)'
)
可以看到,在每一个x轴的类别中都有一个点表示这一类的平均值。
通常我们用条形图来表示聚合值而不是由点标记表示:
alt.Chart(data).mark_bar().encode(
x='a',
y='average(b)'
)
因为分类特征映射到x-axis(x轴),所以结果是一个垂直条形图。要获得水平条形图,我们只需要交换xandy关键字:
alt.Chart(data).mark_bar().encode(
y='a',
x='average(b)'
)
自定义图表可视化的外观
通常情况下,Altair 生成的统计图表都是以默认的形式展示。为了满足不同的可视化展示需求Altair 还提供了一个 API 来自定义可视化的外观。
例如,我们可以使用axis通道类的属性来指定轴标题,我们可以通过将方法的color关键字设置Chart.mark_*为任何有效的 HTML 颜色字符串来指定标记的:
alt.Chart(data).mark_bar(color='firebrick').encode(
alt.Y('a', title='category'),
alt.X('average(b)' , title='avg(b) by category')
)
将数据可视化后,可以使用Chart.save方法为任何图表生成一个独立 HTML 文档的简单示例:
chart = alt.Chart(data).mark_bar().encode(
x='a',
y='average(b)',
)
chart.save('chart.html')
或者利用Streamlit进行实时图表的预览:
import streamlit as st
import pandas as pd
import altair as alt
# 在文件下运行本文件 streamlit run data.py
data = pd.DataFrame({'a': list('CCCDDDEEE'),
'b': [2, 7, 4, 1, 2, 6, 8, 4, 7]})
st.dataframe(data)
chart = alt.Chart(data).mark_bar(color='firebrick').encode(
alt.Y('a', title='category'),
alt.X('average(b)' , title='avg(b) by category')
)
st.altair_chart(chart)
bar(color='firebrick').encode(
alt.Y('a', title='category'),
alt.X('average(b)' , title='avg(b) by category')
)
st.altair_chart(chart)
官方教程:https://altair-viz.github.io/



