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

如何为堆叠排列的ggplot添加带背景的标题并对齐

刚好我经常处理这类没法用分面的多图组合需求,给你两个实用的方案,都是不用统一数据就能实现堆叠+类分面标题的效果~

方法1:用你已经在用的ggpubr包实现

ggpubr的ggarrange()函数本身就支持给每个子图添加自定义标签,我们可以把这些标签调整成类似分面标题的样式,放在每个子图的顶部:

首先先准备好你的多个ggplot图(这里用示例数据模拟):

library(ggplot2)
library(ggpubr)

set.seed(123) # 让结果可重复
plot.data <- data.frame("v1"=rnorm(20), "v2"=rnorm(20))
plot1 <- ggplot(data=plot.data) + geom_point(aes(x=v1, y=v2)) + theme_bw()
plot2 <- ggplot(data=plot.data) + geom_line(aes(x=v1, y=v2)) + theme_bw()
plot3 <- ggplot(data=plot.data) + geom_boxplot(aes(x=factor(1), y=v1)) + theme_bw() + xlab("")

然后用ggarrange堆叠排列,同时添加类分面的标题:

# 堆叠成1列3行,添加自定义标题并调整样式
combined_plot <- ggarrange(
  plot1, plot2, plot3,
  ncol = 1, 
  nrow = 3,
  labels = c("散点图", "折线图", "箱线图"), # 替换成你需要的子图标题
  label.x = 0.5, # 标题水平居中
  label.y = 1.02, # 让标题刚好在子图上方
  label.font = list(size = 10, face = "bold", color = "black") # 模仿分面标题的样式
)

# 可选:添加整体大标题
annotate_figure(combined_plot, top = text_grob("组合图形(带类分面标题)", face = "bold", size = 14))

方法2:用patchwork包(更灵活的新选择)

patchwork是现在ggplot多图组合的热门工具,语法更直观,调整样式也更自由,同样适合你的场景:

先加载包并准备示例图:

library(ggplot2)
library(patchwork)

set.seed(123)
plot.data <- data.frame("v1"=rnorm(20), "v2"=rnorm(20))
plot1 <- ggplot(data=plot.data) + geom_point(aes(x=v1, y=v2)) + theme_bw()
plot2 <- ggplot(data=plot.data) + geom_line(aes(x=v1, y=v2)) + theme_bw()
plot3 <- ggplot(data=plot.data) + geom_boxplot(aes(x=factor(1), y=v1)) + theme_bw() + xlab("")

然后用斜线/实现堆叠,给每个图添加类分面的标题:

# 堆叠组合,给每个子图设置标题并调整样式(贴近分面效果)
combined_plot <- (plot1 + labs(title = "散点图") + 
                   theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 10))) /
                 (plot2 + labs(title = "折线图") + 
                   theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 10))) /
                 (plot3 + labs(title = "箱线图") + 
                   theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 10)))

# 可选:添加整体大标题
combined_plot + plot_annotation(title = "组合图形(带类分面标题)", 
                                theme = theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 14)))

这两种方法都完全不需要统一所有图的数据,不管你的每个图用的是什么数据源、什么图形类型,都能轻松堆叠并添加类似分面的标题~

内容的提问来源于stack exchange,提问作者Dario.gs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:38:00