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

如何在Altair箱线图中添加每组观测数量?

在Altair箱线图中添加每组观测数量的实现方法

这里以官方人口数据箱线图为例,提供两种清晰展示每组观测数的方案:

方案1:在箱线图上方添加计数文本

通过分层图表实现,底层是原箱线图,上层叠加显示每组观测数的文本标记:

import altair as alt
from vega_datasets import data

source = data.population.url

# 绘制基础箱线图
boxplot = alt.Chart(source).mark_boxplot(extent='min-max').encode(
    x='age:O',
    y='people:Q'
)

# 生成每组观测数的文本标签,放在箱线图顶部
count_label = alt.Chart(source).mark_text(
    align='center',
    baseline='bottom',
    dy=-5  # 调整文本与箱线图的垂直间距
).encode(
    x='age:O',
    y='max(people):Q',  # 文本锚定在该组数据的最大值位置
    text='count():Q'  # 显示观测数量
)

# 合并两个图层
boxplot + count_label

效果:每个年龄组的箱线图上方会直接显示对应的观测数量,直观不拥挤。

方案2:将计数整合到X轴标签中

把年龄和观测数合并成新的X轴标签,让轴标签自带计数信息,更紧凑:

import altair as alt
from vega_datasets import data

source = data.population.url

alt.Chart(source).transform_aggregate(
    # 按年龄分组计算观测数
    group_count='count()',
    groupby=['age']
).transform_calculate(
    # 生成带计数的新标签文本
    age_label=alt.datum.age + ' (' + alt.datum.group_count.toString() + ')'
).mark_boxplot(extent='min-max').encode(
    x=alt.X('age_label:O', title='年龄(观测数量)'),
    y='people:Q'
)

效果:X轴上直接显示类似0 (20)的标签,无需额外文本层,图表结构更简洁。

如果需要调整样式,比如文本颜色、字体大小,或者把计数放在箱线图中位数位置,只需修改mark_text的参数或y轴的聚合方式即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 12:30:53