如何用ggplot2在堆叠条形图中添加三组汇总条形
在堆叠条形图中添加汇总条形的方法
嘿,这个需求很好实现,咱们不用单独绘制新图表,只要稍微改造下数据集,就能在同一图里加入汇总各组的条形啦!下面是具体的步骤和代码:
核心思路
我们需要构造一份汇总数据:把原有的三组(carb=1、2、3)的数据合并成一个新的分类(比如叫"All"),然后将这份汇总数据和原数据合并,让ggplot自动把这个新分类作为一个额外的条形展示出来。
修改后的完整代码
library(ggplot2) ds <- as.data.frame(mtcars) ds$gear <- as.factor(ds$gear) ds$carb <- as.factor(ds$carb) d1 <- ds[ds$carb %in% c("1","2","3"),] # 构造汇总数据集:复制原数据,将carb标记为"All" d_all <- d1 d_all$carb <- "All" # 合并原数据和汇总数据 d_combined <- rbind(d1, d_all) # 绘制包含汇总的堆叠条形图 ggplot(d_combined, aes(fill = gear, x = carb)) + coord_flip() + geom_bar(position = position_fill(reverse = TRUE), width = 0.7) + # 可选:给汇总条形添加黑色边框,让它更突出 geom_bar(data = d_all, aes(fill = gear, x = carb), position = position_fill(reverse = TRUE), width = 0.7, color = "black", size = 1)
代码解释
- 构造汇总数据:我们把原数据
d1复制一份,把所有行的carb字段改成"All",这样这份数据就代表了三组的整体情况。 - 合并数据集:用
rbind把原数据和汇总数据合并,得到包含原分类和汇总分类的新数据集d_combined。 - 绘制图表:使用合并后的数据集绘图,ggplot会自动在x轴(因为用了
coord_flip,实际是y轴)添加"All"这个分类,生成汇总条形。 - 可选优化:额外添加一层
geom_bar专门给汇总数据加黑色边框,能让汇总条形和其他分类更易区分。
如果你需要的是计数堆叠而非百分比堆叠,只要把position_fill换成position_stack就可以啦,逻辑是一样的。
内容的提问来源于stack exchange,提问作者Philipp Staudacher
相关产品推荐
相关产品推荐

