R语言中ggplot2的geom_bar参数group=1的作用机制解析
ggplot2中geom_bar添加group=1后计算比例的执行细节解析
先明确核心逻辑:geom_bar默认调用stat_count,而stat_count计算prop(比例)的规则完全由分组机制决定。
初始代码的执行流程
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, y = after_stat(prop)))
- 当指定
x = cut时,ggplot会自动把cut的每个离散水平作为独立分组(这是离散型x轴的默认分组规则) stat_count对每个分组单独统计:- 先算出该组的样本数量
n - 再计算
prop = n / 该组总样本数,而每个分组自身的总样本数就是n,所以结果必然是1
- 先算出该组的样本数量
- 最终所有柱子高度都为1,完全无法体现各cut水平在整体中的占比
添加group=1后的执行流程
ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, y = stat(prop), group = 1))
group = 1是关键,它直接改写了分组逻辑,执行步骤变为:
group = 1强制ggplot把整个diamonds数据集视为单一分组,覆盖了x = cut带来的默认分组规则stat_count先遍历cut的每个水平,统计每个水平的样本数n_i- 计算
prop时,分母变为整个数据集的总样本数(所有n_i的总和),即prop = n_i / sum(n_i) - 最终每个柱子的高度对应cut水平在整体中的占比,得到符合预期的结果
直白点说,group=1就是告诉stat_count:算比例的时候别按x轴的小分组算,要拿每个x水平的数量除以全局总数。
内容的提问来源于stack exchange,提问作者Zius
相关产品推荐
相关产品推荐

