R语言如何绘制两组间多指标比较的单幅合并柱状图
两组间多指标比较柱状图实现方案
你原有单指标绘图的逻辑完全可以复用,只需要先把宽格式数据集转换为ggpubr兼容的长格式,再调整映射关系即可,不需要更换绘图工具。
1. 数据预处理
你当前的数据集是宽格式:三个量表得分各占一列,无法直接映射多组绘图元素。需要先把三个指标列转换为长格式,保留性别分组变量:
# 加载依赖包 library(ggpubr) library(tidyr) # 示例数据集(和你提供的完全一致) Extraversion <- c(4.3, 2, 4.2, 4, 2, 1.5, 3.8, 3.5, 2.1, 2.1, 3) Anxiety <- c(1.2, 3, 1, 2.3, 5, 5, 2.3, 2.2, 5, 4.5, 3) Depression <- c(2, 3.5, 1, 3.5, 5, 5, 1, 2, 4.3, 4.5, 1) Sex <- c("Male", "Female", "Male", "Male", "Female", "Female", "Male", "Female", "Female", "Female", "Male") data <- data.frame(Extraversion, Anxiety, Depression, Sex) # 宽格式转长格式 data_long <- pivot_longer( data, cols = c(Extraversion, Anxiety, Depression), names_to = "Indicator", values_to = "Score" )
转换后的数据每一行对应1名被试的1项量表得分,包含3列:性别(Sex)、指标名称(Indicator)、对应得分(Score)。
2. 绘图代码
直接沿用你之前的ggbarplot参数配置,仅调整x轴、填充变量的映射,微调位置避让参数避免元素重叠:
ggbarplot( data_long, x = "Indicator", y = "Score", add = c("mean_se", "jitter"), # 保留均值±标准误误差棒、原始散点 color = "black", fill = "Sex", # 按性别区分柱子填充色 alpha = 0.6, palette = "jama", # 保留原有jama配色 position = position_dodge(0.8), xlab = "心理量表指标", ylab = "量表评分(1-5分)", legend.title = "性别" )
可选调整
- 若需要x轴展示性别、每个性别下并排三个指标的柱子,仅需把代码中
x = "Indicator"和fill = "Sex"的映射互换,适当调整position_dodge宽度即可。 - 若需要添加组间比较的显著性标记,直接在绘图代码后拼接
+ stat_compare_means(aes(group = Sex), label = "p.signif"),即可自动为每个指标添加男女组差异的显著性标记,和单指标图的标注逻辑完全一致。
内容的提问来源于stack exchange,提问作者HelplessStatistician
相关产品推荐
相关产品推荐

