如何使用ggplot2基于已分组数据绘制堆叠柱状图?
用ggplot绘制堆叠柱状图的实操步骤
首先确保你已经安装并加载ggplot2包:
install.packages("ggplot2") # 未安装时执行 library(ggplot2)
1. 确认数据集格式
堆叠柱状图要求数据为长格式(每一行对应一个分组的数值记录)。如果你的数据是宽格式(每个分组单独成列),先通过tidyr包转换:
# 示例宽格式数据 wide_data <- data.frame( 类别 = c("类别A", "类别B"), 分组1 = c(10, 8), 分组2 = c(15, 12) ) # 转换为长格式 library(tidyr) long_data <- pivot_longer(wide_data, cols = -类别, names_to = "分组", values_to = "数值")
2. 绘制基础堆叠柱状图
用geom_col()(已有数值用这个,计数统计用geom_bar()),通过fill参数指定分组列实现堆叠:
ggplot(long_data, aes(x = 类别, y = 数值, fill = 分组)) + geom_col()
3. 自定义优化(可选)
- 添加堆叠数值标签:
ggplot(long_data, aes(x = 类别, y = 数值, fill = 分组)) + geom_col() + geom_text(aes(label = 数值), position = position_stack(vjust = 0.5))
- 调整配色:
ggplot(long_data, aes(x = 类别, y = 数值, fill = 分组)) + geom_col() + scale_fill_brewer(palette = "Set2") # 使用预设调色板
- 替换主题与添加标签:
ggplot(long_data, aes(x = 类别, y = 数值, fill = 分组)) + geom_col() + labs(title = "分组堆叠柱状图", x = "类别", y = "数值", fill = "分组") + theme_minimal()
- 绘制百分比堆叠图:
ggplot(long_data, aes(x = 类别, y = 数值, fill = 分组)) + geom_col(position = position_fill()) + labs(y = "百分比")
内容的提问来源于stack exchange,提问作者sweatcrepe
相关产品推荐
相关产品推荐

