ggplot2绘制多分组变量比例条形图:比例计算错误修正
修正ggplot2分组比例计算错误
现有代码生成的图表样式符合需求,但比例计算完全错误。例如黄党(yellow party)选民中针对var1选择“no”的实际比例为42%,但图表显示超过60%。无需提前通过分组、汇总、mutate的繁琐步骤,直接修正ggplot代码即可解决。
问题根源
原代码中group=value的设置错误,导致after_stat(prop)的比例计算分母是整个分面(单个政党的所有变量)的样本总数,而非每个政党+变量组合内的样本数,因此结果偏离实际值。
修正后的代码
df %>% pivot_longer(-party) %>% ggplot(aes(y = name, fill = value)) + geom_bar( aes(x = after_stat(prop), group = interaction(name, party)), position = "dodge" ) + facet_grid(~party)
代码说明
- 通过
group = interaction(name, party)指定比例计算的分组范围:每个政党(party)与变量(name)的组合内,计算各选项(value)的占比,确保分母是该组合的样本总数。 position="dodge"保留了原有的并列柱状图样式,每个变量下的不同选项柱子横向排列,符合需求。
验证
运行修正后的代码后,黄党var1的“no”选项比例将正确显示为约42%,与实际统计结果一致。
内容的提问来源于stack exchange,提问作者spindoctor
相关产品推荐
相关产品推荐

