RStudio中相关数据的分组箱线图绘制问题求助
解决方案:分组箱线图绘制步骤
问题根源
你的数据集是宽格式(每个指标s1-s8各占一列),而ggplot2绘制分组箱线图需要长格式数据(所有数值放在同一列,用另一列标识变量类别)。同时原代码存在两个关键错误:
aes()中不能同时传入多个y变量(y=s1,s2,...),ggplot2无法识别这种写法- 错误使用
facet_wrap(. ~ horario),导致每个面板只显示单个时间点的数据,无法实现分组效果
具体步骤
1. 安装并加载必要的包
需要用tidyr转换数据格式,ggplot2绘图:
install.packages(c("tidyr", "ggplot2")) library(tidyr) library(ggplot2)
2. 将宽格式数据转换为长格式
用pivot_longer()把s1-s8列合并为一列数值,同时生成标识变量名的列:
phe_long <- pivot_longer(phe, cols = starts_with("s"), # 选择所有以s开头的列 names_to = "样本", # 新列名:变量类别(s1-s8) values_to = "数值") # 新列名:对应数值
转换后的数据结构示例:
| horario | 样本 | 数值 |
|---|---|---|
| 6:30 | s1 | 7.48 |
| 6:30 | s2 | 7.61 |
| ... | ... | ... |
3. 绘制分组箱线图
根据你的预期图,设置x轴为时间点horario,每个时间点下按样本(s1-s8)分组绘制箱线,用填充色区分不同样本:
ggplot(phe_long, aes(x = horario, y = 数值, fill = 样本)) + geom_boxplot(position = position_dodge(width = 0.8)) + # 分组箱线错开显示 labs(title = "分组箱线图", x = "时间点", y = "数值", fill = "样本") + theme_minimal()
如果需要x轴为样本、按时间点分组,只需调整aes()参数:
ggplot(phe_long, aes(x = 样本, y = 数值, fill = horario)) + geom_boxplot(position = position_dodge(width = 0.8)) + labs(title = "分组箱线图", x = "样本", y = "数值", fill = "时间点") + theme_minimal()
效果说明
转换为长格式后,ggplot2可以正确识别分组变量,生成符合你需求的多组箱线图,清晰展示不同分组下的数据分布。
内容的提问来源于stack exchange,提问作者INGRID MENDOZA
相关产品推荐
相关产品推荐

