使用after_stat或..prop..导致ggplot2柱状图绘制异常
问题原因与解决方法
你的代码里p2的比例计算逻辑存在问题:geom_bar默认会按x的分组来计算prop,每个分组内的观测占比自然是1(100%),所以所有条形高度都一致。要计算整体数据集的比例,需要在aes里指定group = 1,让比例基于全部数据计算。
修正后的代码如下:
library(tidyverse) library(patchwork) x <- rbinom(n = 1000, size = 5, prob = 0.3) #simulate a random sample plotdatax = tibble(xvar = as.factor(x)) p1 <- ggplot(data = plotdatax) + geom_bar(aes(x = xvar)) # 新增group=1,让prop基于整体数据计算 p2 <- ggplot(data = plotdatax) + geom_bar(aes(x = xvar, y = after_stat(prop), group = 1)) p1+p2
另外,你提到的旧版..prop..和新版after_stat(prop)用法本质一致,问题不在语法版本,而是分组逻辑的缺失。如果用旧版写法,同样需要加group=1:
p2 <- ggplot(data = plotdatax) + geom_bar(aes(x = xvar, y = ..prop.., group = 1))
这样修改后,p2就能正确显示每个xvar类别在整体中的占比了。
内容的提问来源于stack exchange,提问作者user1329307
相关产品推荐
相关产品推荐

