如何使用patchwork将组合子图(拼接图)作为单个图进行标注?
解决方法
要实现将顶部拼接好的子图整体标注为A、底部图标注为B的需求,核心是把顶部的patchwork组合包成一个单一绘图单元,让patchwork将其视为一个整体来分配标签。可以用patchwork的wrap_elements()函数实现:
修改后的代码
library(ggplot2) library(patchwork) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + ggtitle('Plot 1') p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) + ggtitle('Plot 2') p3 <- ggplot(mtcars) + geom_point(aes(hp, wt, colour = mpg)) + ggtitle('Plot 3') p4 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) + ggtitle('Plot 4') # 用wrap_elements将顶部三个子图包裹为单一单元 top_plot <- wrap_elements(p1 + p2 + p3) bottom_plot <- p4 # 组合后添加标注,此时只会给两个单元分配A和B combined_plot <- (top_plot / bottom_plot) + plot_annotation(tag_levels="A") combined_plot
原理说明
wrap_elements()会把内部的patchwork组合转化为一个独立的绘图对象,相当于让patchwork把顶部的三个子图看作“一张图”。- 此时再进行上下布局组合时,
plot_annotation(tag_levels="A")就会针对两个顶级单元(顶部整体、底部单图)分配标签A和B,不再给内部子图单独标注。
如果需要保留顶部子图的标题但不显示它们的标签,也可以在顶部组合时先禁用内部标签:
top_plot <- (p1 + p2 + p3) + plot_annotation(tag_levels = NULL) top_plot <- wrap_elements(top_plot)
内容的提问来源于stack exchange,提问作者Luther Blissett
相关产品推荐
相关产品推荐

