如何在R语言中为patchwork组合图添加共用y轴标签
为patchwork组合图添加共用Y轴标签(仅操作组合后的plots对象)
问题描述
我用patchwork::wrap_plots()生成了plots对象,想给它加一个共用的Y轴标签,尝试了plots + common_ylab但没成功。注意:只能访问plots对象,无法修改单个子图。
代码示例:
library(ggplot2) library(patchwork) library(grid) p1 <- ggplot(mtcars, aes(mpg,vs))+ geom_point()+ylab("") p2 <- ggplot(mtcars, aes(mpg,vs))+ geom_point()+ylab("") p3 <- ggplot(mtcars, aes(mpg,vs))+ geom_point()+ylab("") p4 <- ggplot(mtcars, aes(mpg,vs))+ geom_point()+ylab("") (plots = wrap_plots(p1,p2,p3,p4)) # 尝试创建的共用Y轴标签 (common_ylab = grid::grid.draw(grid::textGrob("VS", x = 0.02, rot = 90))) # 尝试失败的操作: plots + common_ylab
解决方案
grid.draw()是直接绘制图形的函数,无法和patchwork对象直接相加,以下两种方法可以解决问题:
方法一:用wrap_elements()包装文本grober
把Y轴标签包装成patchwork兼容的元素,再和原组合图按布局拼接:
# 假设plots对象已存在 plots <- wrap_plots(p1,p2,p3,p4) # 将文本grober转为patchwork元素 ylab_element <- wrap_elements(grid::textGrob("VS", rot = 90)) # 组合布局:标签占窄列,原图占主体列 plots_with_ylab <- ylab_element + plots + plot_layout(widths = c(0.05, 0.95)) # 查看结果 plots_with_ylab
方法二:用annotation_add()直接添加标注
利用patchwork的内置函数,直接在组合图上添加Y轴标签:
plots_with_ylab <- plots + annotation_add( grid::textGrob("VS", rot = 90, x = unit(0.01, "npc")), position = "left" ) # 查看结果 plots_with_ylab
说明
- 方法一通过拆分布局精确控制标签宽度,适合对排版要求高的场景;
- 方法二更简洁,通过
position参数快速指定标签的位置。
内容的提问来源于stack exchange,提问作者rnorouzian
相关产品推荐
相关产品推荐

