You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于已有频率数据集,用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:59:59