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
相关产品推荐
相关产品推荐

