使用ggplot绘制数据集所有自变量与因变量class的分面箱线图
解决方案
你之前的代码问题出在stack操作没有保留class分类变量,无法按患癌状态分组绘制箱线图,也缺少分面配置。使用长表转换+分面即可实现需求,代码如下:
第一步:加载所需包
library(ggplot2) library(tidyr)
第二步:将宽表转为长表(保留class字段)
# 把除class外的30个数值列转为长格式 web_db_long <- pivot_longer(web_db, cols = -class, names_to = "variable", values_to = "value")
第三步:绘制分面箱线图
ggplot(web_db_long, aes(x = class, y = value)) + geom_boxplot() + # 5行6列布局,y轴自由适配各变量尺度 facet_wrap(~variable, nrow = 5, ncol = 6, scales = "free_y") + # 可自定义坐标轴标题 labs(x = "患癌状态", y = "变量数值") + # 可选:优化主题显示 theme_bw()
参数说明
facet_wrap的nrow=5, ncol=6刚好适配30个自变量的分面需求,你也可以改为nrow=6, ncol=5调整布局scales="free_y"是实现每个子图y轴独立适配变量尺度的关键参数,去掉后所有子图会共用同一y轴范围
无额外包依赖的备选方案
如果不想安装tidyr包,也可以用基础R的reshape函数完成长表转换,后续绘图代码和上面完全一致:
web_db_long <- reshape(web_db, varying = list(1:30), v.names = "value", timevar = "variable", times = names(web_db)[1:30], direction = "long")
内容的提问来源于stack exchange,提问作者R_Student
相关产品推荐
相关产品推荐

