R语言ggplot2多箱线图:如何修改坐标轴与分面标签?
解决方案
要实现你需要的标签修改,只需要在原有代码基础上做两处调整:
- 修改Y轴标签:直接添加
ylab("BMI")替换默认的变量名 - 修改分面标签:在
facet_grid中用labeller参数自定义每个分面的显示文本,把T1_SB_OSA映射为T1,也可以同步简化其他分面标签保持风格统一
修改后的完整代码:
db1 <- dt %>% dplyr::select("RSQ_STB_BMI","T1_SB_OSA","T2_SB_OSA","T3_SB_OSA","PP_SB_OSA") db1 %>% gather(variable, value, -RSQ_STB_BMI) %>% ggplot(aes(factor(value), RSQ_STB_BMI, fill = factor(value))) + geom_boxplot() + ggtitle('Boxplot of BMI by the Risk of Sleep Apnea')+ scale_fill_manual(values = c('#97e095','#4c9f83','#1c4f60'))+ theme(plot.title = element_text(hjust = 0.5))+ # 修改Y轴标签为BMI ylab("BMI") + # 自定义分面标签,保留原有分面顺序 facet_grid(~factor(variable, levels=c("T1_SB_OSA","T2_SB_OSA","T3_SB_OSA","PP_SB_OSA")), switch = "both", labeller = labeller(variable = c( T1_SB_OSA = "T1", T2_SB_OSA = "T2", T3_SB_OSA = "T3", PP_SB_OSA = "PP" )))+ theme_bw()+ theme(panel.spacing = unit(0, "lines"), panel.border = element_rect(fill = NA), strip.background = element_blank(), axis.title.x = element_blank(), legend.position = "none", strip.placement = "outside")
改动细节说明
- Y轴标签:
ylab("BMI")是ggplot中修改Y轴标题最直接的方式,会覆盖自动生成的原变量名RSQ_STB_BMI。 - 分面标签:
labeller函数可以精准控制每个分面的显示文本,这里把长变量名映射成短标签,如果你只需要修改T1_SB_OSA,删掉其他映射项即可。
内容的提问来源于stack exchange,提问作者Just a stat student
相关产品推荐
相关产品推荐

