You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Altair教程:如何添加聚合结果作为分面(额外列)

在Altair中添加全局聚合分面(算术/几何均值)

要在现有分面图表中添加基于全数据聚合结果的分面,无需依赖Pandas预处理,直接通过Altair内置的数据转换即可实现,以下是具体方案:

算术均值分面实现

通过transform_aggregate计算每个Variant的全局算术均值,再将聚合数据与原始数据合并,生成包含原Dataset和"Overall"分面的图表:

import altair as alt
import pandas as pd

data = {
    "Dataset": ["A", "B", "A", "B"],
    "Variant": ["X", "X", "Y", "Y"],
    "Val": [1, 4, 7, 3],
}

df = pd.DataFrame(data)

# 保留原始数据的分面标识
original = alt.Chart(df).transform_calculate(
    Dataset=alt.datum.Dataset
)

# 计算全局算术均值,生成Overall分面数据
overall_mean = alt.Chart(df).transform_aggregate(
    mean_val='mean(Val)',
    groupby=['Variant']
).transform_calculate(
    Dataset='"Overall"',
    Val=alt.datum.mean_val
)

# 合并原始数据与聚合数据
combined = original.transform_union([overall_mean])

# 绘制分面柱状图
combined.mark_bar().encode(
    x="Variant:N",
    y="Val:Q",
    column="Dataset:N"
)

几何均值分面实现

Altair没有内置几何均值函数,但可以通过对数变换间接计算(几何均值 = exp(mean(log(Val)))),只需修改聚合逻辑即可:

# 计算全局几何均值,生成对应分面数据
overall_geo_mean = alt.Chart(df).transform_aggregate(
    geo_mean='exp(mean(log(Val)))',
    groupby=['Variant']
).transform_calculate(
    Dataset='"Overall (Geometric Mean)"',
    Val=alt.datum.geo_mean
)

# 合并原始数据与几何均值聚合数据
combined_geo = original.transform_union([overall_geo_mean])

# 绘制包含几何均值分面的图表
combined_geo.mark_bar(color='orange').encode(
    x="Variant:N",
    y="Val:Q",
    column="Dataset:N"
)

如果需要同时展示算术均值和几何均值分面,可将两种聚合数据一并加入合并:

# 合并所有数据
combined_all = original.transform_union([overall_mean, overall_geo_mean])

combined_all.mark_bar().encode(
    x="Variant:N",
    y="Val:Q",
    column="Dataset:N",
    color=alt.Color('Dataset:N', legend=None)
)

内容的提问来源于stack exchange,提问作者jowens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:57:02