You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 19:03:29