Vega-Altair:Python 数据可视化的声明式方案

Vega-Altair 在 GitHub 上拿到了 10,398 Star。

数据可视化在 Python 生态里已经有 matplotlib、seaborn、plotly 这些老牌选手了。Vega-Altair 的切入点不一样:声明式语法。你描述数据列和视觉通道之间的映射关系,图表自动渲染出来,不用手动控制每一个像素。

正文顶部截图

1、声明式语法到底什么意思

以散点图为例。在 Vega-Altair 里,你要做的只是告诉它:“x 轴绑 Horsepower,y 轴绑 Miles_per_Gallon,颜色区分 Origin”。三行代码收工。

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',
)

不用调 tick 间距,不用设 figure size,不用纠结渲染后端。Altair 的 Python API 严格对应底层的 Vega-Lite JSON 规范,写出来的每一行代码都有类型检查和规范校验。

2、交互是内置的,不是打补丁的

大多数可视化库把交互当附加功能。Vega-Altair 从 Vega-Lite 继承了交互作为一等公民的设计。

用几行额外代码,上面的散点图就能变成一个联动视图:用户在散点图上框选一个区域,旁边的柱状图自动过滤,只显示选中范围内的数据分布。

brush = alt.selection_interval()

points = alt.Chart(source).mark_point().encode(
    x='Horsepower',
    y='Miles_per_Gallon',
    color=alt.condition(brush, 'Origin', alt.value('lightgray'))
).add_params(brush)

bars = alt.Chart(source).mark_bar().encode(
    y='Origin', color='Origin', x='count(Origin)'
).transform_filter(brush)

points & bars

brush 声明了一个交互选区,condition 根据选区状态切换颜色,transform_filter 把柱状图的数据源邦定到同一个选区。整个过程不需要写任何事件监听或回调逻辑。

3、它凭什么站得住脚

Matplotlib 是命令式的,灵活但代码量大。Seaborn 在 matplotlib 上包了一层统计图层,简化了一部分,但定制到一定程度还是会落地到 matplotlib API。Plotly 的交互能力很强,但 API 偏向 JavaScript 思维。

Vega-Altair 的差异化在于三点。第一,完整拥抱 Vega-Lite 的声明式可视化语法,不是自己发明一套。第二,交互和数据变换(filter、aggregate、window)都在同一个声明式模型内完成,不用切到 pandas 预处理再切回来。第三,输出的 JSON 规范可以直接丢给 Vega 渲染器,跨平台分享时不用重新实现。

README区域截图

4、安装和运行

pip install altair

Conda 用户:

conda install altair -c conda-forge

依赖很简单,安装后可以在 JupyterLab、Jupyter Notebook、VS Code、GitHub 和 nbviewer 上直接渲染。导出选项包括 PNG、SVG、独立 HTML 页面和 Vega-Lite Editor 链接。也可以序列化为 JSON 文件,方便版本管理或后端渲染。

5、适合哪些人用

  • 每天用 pandas 做数据分析,想用更少的代码产出更干净的图的人
  • 需要做数据探索和快速原型,不想在可视化代码上花太多时间的数据科学家
  • 在 Jupyter 环境里做研究,需要把图表直接嵌入 notebook 的学术用户
  • 对交互式可视化有需求,但不想跳进 JavaScript 生态的 Python 开发者

Vega-Altair 最初由 Jake Vanderplas 和 Brian Granger 开发,背后有华盛顿大学 Interactive Data Lab 的学术支持,2018 年发表在 JOSS 期刊上。它不是那种突然爆火又突然沉寂的工具,是一条持续迭代了多年的成熟产品线。

nteractive Data Lab 的学术支持,2018 年发表在 JOSS 期刊上。它不是那种突然爆火又突然沉寂的工具,是一条持续迭代了多年的成熟产品线。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐