基于已有频率数据集,用ggplot2绘制百分比堆叠图的方法
使用ggplot2绘制已有频率数据的百分比堆叠图
步骤1:构造数据框(或导入你的数据)
先将你的数据转换为R可识别的数据框:
df <- data.frame( Fib = c("Fib 1", "Fib 2"), NCWs = c(5918, 1609), CWs = c(4358, 2553) )
步骤2:将宽格式数据转为长格式
ggplot更适配长格式数据,用tidyr::pivot_longer完成格式转换:
library(tidyr) df_long <- df %>% pivot_longer(cols = -Fib, names_to = "Group", values_to = "Count")
步骤3:计算分组内的百分比
按Group(NCWs/CWs)分组,计算每个Fib在对应分组中的占比:
library(dplyr) df_long <- df_long %>% group_by(Group) %>% mutate(Percentage = Count / sum(Count) * 100)
步骤4:绘制百分比堆叠图
用ggplot2绘制堆叠图,并添加居中的百分比标签:
library(ggplot2) ggplot(df_long, aes(x = Group, y = Percentage, fill = Fib)) + geom_col(position = "stack") + # 生成堆叠柱状图 geom_text(aes(label = sprintf("%.1f%%", Percentage)), position = position_stack(vjust = 0.5)) + # 居中显示百分比文本 labs(title = "纤维类型百分比堆叠图", x = "分组", y = "百分比", fill = "纤维类型") + theme_minimal()
补充说明
- 转长格式是为了让ggplot能正确映射
fill(纤维类型)和x(分组)变量 - 按分组计算百分比,确保每个分组的堆叠总和为100%
- 若想直接基于原始数值生成百分比堆叠,可替换
geom_col的位置参数为position = "fill",此时y轴范围为0-1,需对应调整标签和刻度格式
内容的提问来源于stack exchange,提问作者Debutant
相关产品推荐
相关产品推荐

