ggplot2 for循环绘制箱线图y轴标签缺失及格式设置问题
ggplot2 循环批量绘制箱线图问题修复
原有实现
- 单变量符合格式要求的绘图代码:
p <- ggplot(mg_data, aes(x=Treatment, y=CD68, color=Treatment)) + geom_boxplot(mg_data, mapping=aes(x=Treatment, y=CD68)) p + theme_classic() + geom_jitter(shape=16, position=position_jitter(0.2))
- 初始批量循环代码:
variables <- mg_data %>% select(10:17) for(i in variables) { print(ggplot(mg_data, aes(x = Treatment, y = i, color=Treatment)) + geom_boxplot()) }
- 存在的问题:
- 循环输出图表的y轴不显示当前绘图对应的变量名称,和单张绘图效果不一致
- 无法将自定义主题、抖动散点等格式配置加入循环逻辑
修复方案
直接循环数据列时,ggplot无法识别原始列名作为轴标签,改为循环列名、通过.data代词做映射即可解决该问题,自定义图层直接按顺序叠加到ggplot对象上即可。
修正后的可运行代码:
library(ggplot2) library(dplyr) # 提取需要绘图的列名 plot_vars <- colnames(mg_data %>% select(10:17)) for (var in plot_vars) { p <- ggplot(mg_data, aes(x = Treatment, y = .data[[var]], color = Treatment)) + geom_boxplot() + theme_classic() + geom_jitter(shape = 16, position = position_jitter(0.2)) print(p) }
如果需要固定y轴标签显示,可额外添加labs(y = var)图层强制指定轴文本。
如果需要把生成的图存为对象后续调用,可以用lapply实现:
plot_list <- lapply(plot_vars, function(var) { ggplot(mg_data, aes(x = Treatment, y = .data[[var]], color = Treatment)) + geom_boxplot() + theme_classic() + geom_jitter(shape = 16, position = position_jitter(0.2)) + labs(y = var) }) # 调用查看对应索引的图 print(plot_list[[1]])
内容的提问来源于stack exchange,提问作者KCS
相关产品推荐
相关产品推荐

