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

