Vega/Altair 复合图表全解析:从图层叠加到多视图布局

Vega/Altair 复合图表全解析:从图层叠加到多视图布局

altair Declarative statistical visualization library for Python altair 项目地址: https://gitcode.com/gh_mirrors/alt/altair

概述

在数据可视化领域,Vega/Altair 提供了一套强大的复合图表构建工具,让用户可以轻松创建包含多个视图的复杂可视化。本文将深入解析 Vega/Altair 中的五种核心复合图表类型:图层叠加、水平拼接、垂直拼接、重复图表和分面图表,帮助您掌握构建高级可视化的技巧。

复合图表类型速查表

Vega/Altair 提供了多种创建复合图表的方式,每种方式都有对应的类、函数形式和运算符形式:

| 类 | 函数形式 | 运算符形式 | 说明 | |-------------------|----------------------------|----------------|--------------| | LayerChart | alt.layer(chart1, chart2) | chart1 + chart2 | 图层叠加 | | HConcatChart | alt.hconcat(chart1, chart2) | chart1 | chart2 | 水平拼接 | | VConcatChart | alt.vconcat(chart1, chart2) | chart1 & chart2 | 垂直拼接 | | RepeatChart | chart.repeat(row, column) | - | 重复图表 | | FacetChart | chart.facet(facet, row, column) | - | 分面图表 |

图层叠加 (Layered Charts)

图层叠加允许您在相同的坐标系上叠加不同的图表,非常适合需要同时展示多种标记类型的场景。

基本用法

base = alt.Chart(stocks).encode(
    x='date:T',
    y='price:Q',
    color='symbol:N'
).transform_filter(
    alt.datum.symbol == 'GOOG'
)

# 运算符形式
combined = base.mark_line() + base.mark_point()

# 函数形式
combined = alt.layer(base.mark_line(), base.mark_point())

图层顺序的重要性

图层叠加时,后添加的图层会覆盖先添加的图层。例如在热力图上方添加点标记:

heatmap = alt.Chart(source).mark_rect().encode(...)
points = alt.Chart(source).mark_circle().encode(...)

# 正确的顺序:热力图在下,点在上
correct = heatmap + points

# 错误的顺序:点会被热力图遮挡
wrong = points + heatmap

水平拼接 (Horizontal Concatenation)

水平拼接适合并排展示相关图表,便于比较不同视角的数据。

典型应用场景

# 散点图
chart1 = alt.Chart(iris).mark_point().encode(
    x='petalLength:Q',
    y='petalWidth:Q'
)

# 直方图
chart2 = alt.Chart(iris).mark_bar().encode(
    x='count()',
    y=alt.Y('petalWidth:Q').bin()
)

# 拼接展示
combined = chart1 | chart2
# 或 alt.hconcat(chart1, chart2)

垂直拼接 (Vertical Concatenation)

垂直拼接常用于创建交互式的上下关联视图,如主图+细节图模式。

交互式示例

brush = alt.selection_interval(encodings=['x'])

base = alt.Chart(source).mark_area().encode(
    x='date:T',
    y='price:Q'
)

upper = base.encode(alt.X('date:T').scale(domain=brush))
lower = base.properties(height=60).add_params(brush)

combined = upper & lower
# 或 alt.vconcat(upper, lower)

重复图表 (Repeated Charts)

重复图表提供了一种高效创建多面板图表的方法,特别适合探索多维数据。

基本模式

alt.Chart(iris).mark_point().encode(
    alt.X(alt.repeat("column"), type='quantitative'),
    alt.Y(alt.repeat("row"), type='quantitative'),
    color='species:N'
).repeat(
    row=['petalLength', 'petalWidth'],
    column=['sepalLength', 'sepalWidth']
)

图层重复

alt.Chart(source).mark_line().encode(
    x=alt.X("IMDB_Rating").bin(),
    y=alt.Y(alt.repeat('layer')).aggregate('mean'),
    color=alt.ColorDatum(alt.repeat('layer'))
).repeat(layer=["US_Gross", "Worldwide_Gross"])

分面图表 (Faceted Charts)

分面图表(又称小多重图表)按照数据子集创建多个面板,是探索分类数据的强大工具。

基本分面

# 函数形式
alt.Chart(iris).mark_point().encode(
    x='petalLength:Q',
    y='petalWidth:Q'
).facet(
    column='species:N'
)

# 编码形式
alt.Chart(iris).mark_point().encode(
    x='petalLength:Q',
    y='petalWidth:Q',
    column='species:N'
)

复杂分面

hover = alt.selection_point(on='pointerover')

base = alt.Chart(iris).encode(
    x='petalLength:Q',
    y='petalWidth:Q',
    color=alt.condition(hover, 'species:N', alt.value('lightgray'))
)

points = base.mark_point().add_params(hover)
text = base.mark_text(dy=-5).encode(
    text='species:N',
    opacity=alt.condition(hover, alt.value(1), alt.value(0))
)

alt.layer(points, text).facet('species:N')

选择指南

  1. 图层叠加:当需要在同一坐标系叠加不同标记时使用
  2. 水平/垂直拼接:适合展示完全独立的视图
  3. 重复图表:当多个面板只有编码不同时最有效
  4. 分面图表:按照数据子集创建面板时的最佳选择

掌握这些复合图表技术,您将能够创建出信息丰富、交互性强的专业级数据可视化作品。

altair Declarative statistical visualization library for Python altair 项目地址: https://gitcode.com/gh_mirrors/alt/altair

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

范靓好Udolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值