如何用R的ggplot2绘制多亚组重复测量的准确率百分比条形图?
重复测量区块准确率分组条形图绘制方案
数据说明
你的长格式数据包含:
- 7个重复测量区块(
Block) - 二元准确率(
Acc,0/1)及已计算的区块准确率百分比(AccPercent) - 多维度分组:主组(
Group:DD/TD)、年龄亚组(AgeRange:I/II)、任务条件(SeqType:SOC/MOC)
绘图实现(基于R的ggplot2)
步骤1:数据预处理(聚合群体均值)
若需展示群体平均准确率,先按任务、年龄组、区块、主组分组,计算均值与标准误(用于误差棒):
library(dplyr) # 聚合数据,计算每个分组的平均准确率和标准误 summary_data <- df %>% group_by(SeqType, AgeRange, Block, Group) %>% summarise( mean_acc = mean(AccPercent, na.rm = TRUE), se_acc = sd(AccPercent, na.rm = TRUE)/sqrt(n()), .groups = "drop" ) # 确保区块按顺序排列 summary_data$Block <- factor(summary_data$Block, levels = paste0("rand", 1:7))
步骤2:绘制分组条形图
通过分面实现4个子图,填充色区分DD/TD组:
library(ggplot2) ggplot(summary_data, aes(x = Block, y = mean_acc, fill = Group)) + # 并排条形图 geom_col(position = position_dodge(width = 0.8), width = 0.7) + # 添加误差棒 geom_errorbar(aes(ymin = mean_acc - se_acc, ymax = mean_acc + se_acc), position = position_dodge(width = 0.8), width = 0.2) + # 按年龄组+任务条件生成4个子图 facet_grid(AgeRange ~ SeqType, labeller = labeller( SeqType = c(SOC = "SOC任务", MOC = "MOC任务"), AgeRange = c(I = "年龄组I", II = "年龄组II") )) + # 轴标签设置 scale_y_continuous(name = "准确率(%)", limits = c(0, 100), expand = c(0,0)) + scale_x_discrete(name = "区块") + # 自定义分组颜色 scale_fill_manual(values = c("DD" = "#2c3e50", "TD" = "#e74c3c")) + # 主题优化 theme_bw() + theme( panel.grid.major.x = element_blank(), legend.title = element_blank(), legend.position = "bottom", strip.background = element_rect(fill = "#f8f9fa"), strip.text = element_text(size = 10, face = "bold") )
关键代码解释
position_dodge:让DD/TD两组条形并排,避免重叠facet_grid:精准匹配你需要的「SOC-AgeRange-I」等4组子图布局- 误差棒用标准误,反映群体数据的变异程度
- 主题优化去除冗余网格线,提升图表可读性
内容的提问来源于stack exchange,提问作者Arpitha
相关产品推荐
相关产品推荐

