大家好,我是木木。
今天给大家分享一个声明式可视化的 Python 库,altair。
altair
altair 是一个基于 Vega-Lite 的声明式可视化库。它不要求你手工拼 matplotlib 轴、图例和像素位置,而是用数据字段、mark 类型和编码规则描述图表。对数据分析、报表原型、Notebook 探索和需要可交互图表的内部工具来说,这种写法很自然:图表规格可以导出为 JSON,前端也容易复用。
项目地址:https://github.com/vega/altair
官方文档:https://altair-viz.github.io
三大特点
声明式
关注字段和映射关系,而不是手动画布细节。
交互方便
selection、condition 等能力能快速做筛选和高亮。
规格可导出
图表本质是 Vega-Lite spec,适合保存、审查和前端复用。
最佳实践
安装方式:pip install altair pandas。建议在 Notebook 或报表脚本中先用小数据集确认字段映射,再把图表规格接到前端或报告里。
第一段代码解决的问题是:用 DataFrame 字段声明一个柱状图,并查看生成的 Vega-Lite 规格。
fromimportlib.metadataimportversionimportpandasaspdimportaltairasaltdata=pd.DataFrame({"month":["Jan","Feb","Mar"],"sales":[120,160,90]})chart=alt.Chart(data).mark_bar().encode(x="month",y="sales")spec=chart.to_dict()print("altair:",version("altair"))print("mark:",spec["mark"]["type"])print("fields:",[spec["encoding"][k]["field"]forkin["x","y"]])
第二段代码解决的问题是:按团队颜色拆分折线,并确认数据被嵌入到图表规格中。
importpandasaspdimportaltairasaltdata=pd.DataFrame({"team":["A","A","B","B"],"x":[1,2,1,2],"y":[3,5,2,7]})chart=alt.Chart(data).mark_line(point=True).encode(x="x",y="y",color="team")spec=chart.to_dict()print("mark:",spec["mark"])print("color field:",spec["encoding"]["color"]["field"])print("rows:",len(spec["datasets"][next(iter(spec["datasets"]))]))
环境与版本信息
本文示例使用 Python 3.11.0、altair 6.2.1、pandas 2.3.3。截图展示的是 spec 输出,不依赖浏览器显示图表。
高级功能
Altair 的进阶重点是把图表当作声明式规格来管理。你可以在 Python 里生成、检查、保存 spec,再交给前端或报告系统渲染,这比把图表截图当成最终产物更灵活。
进阶示例解决的问题是:为图表加入点击选择和条件高亮,生成可交互的图表规格。
importpandasaspdimportaltairasaltsource=pd.DataFrame({"category":["A","B","C","D"],"value":[28,55,43,91]})selector=alt.selection_point(fields=["category"])chart=alt.Chart(source).mark_bar().encode(x="category",y="value",color=alt.condition(selector,alt.value("#4c78a8"),alt.value("#d3d3d3")),).add_params(selector)spec=chart.to_dict()print("params:",spec["params"][0]["name"])print("condition test:","condition"inspec["encoding"]["color"])print("dataset rows:",len(spec["datasets"][next(iter(spec["datasets"]))]))
适用场景
适合 Notebook 探索、数据报告、内部分析工具、需要交互高亮的轻量可视化和前后端共享图表规格的场景。
不适用场景
不适合超大数据直接塞进前端 spec、需要像素级手工排版的出版图,或高度定制的 3D/动画图表。
上线检查
- 固定字段名和类型,避免图表 silently 变化。
- 导出 spec 后在目标前端或报告环境里做一次渲染检查。
总结
altair 让图表回到“数据字段如何映射视觉”的问题上。写法优雅,尤其适合探索分析和可复用图表规格。