使用transform_aggregate的Altair直方图无法正确叠加全局均值
Altair直方图叠加均值线消失问题解决
问题根因
你当前的写法中,rule图层编码时用的mean(agg):Q聚合操作,会将已经按发行商聚合后的数据集再次压缩为仅包含全局均值的单行数据,两个图层叠加时数据分组逻辑冲突,导致直方图的分bin计数逻辑失效,柱状图因此无法显示。
修正后代码
import altair as alt from vega_datasets import data source = data.movies.url # 先按发行商聚合得到各发行商平均IMDB评分,再关联计算全局均值 base = alt.Chart(source).transform_aggregate( agg='mean(IMDB_Rating)', groupby=['Distributor'] ).transform_joinaggregate( global_mean='mean(agg)' # 全局均值作为新字段附加到每行数据,不改变原数据行数 ) bar = base.mark_bar().encode( x=alt.X('agg:Q', bin=alt.Bin(step=0.5)), y='count()' ) rule = base.mark_rule(color='red').encode( x='global_mean:Q', size=alt.value(5) ) bar + rule
修正逻辑说明
使用transform_joinaggregate计算全局均值时,不会将数据集压缩为单行,而是把计算得到的全局均值作为新字段附加到每一行已聚合的数据上,保证柱状图的分bin计数和均值线的取值可以共用同一份完整数据,不会出现逻辑冲突。
内容的提问来源于stack exchange,提问作者shimiao
相关产品推荐
相关产品推荐

