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

使用ggpubr拼接ggplot图形时标题重叠问题求助

解决ggpubr拼接图形时标题重叠的问题

方案1:调整主标题的垂直位置

利用annotate_figure()的fig.lab.y参数,将主标题向上偏移(数值大于1时会向上移动,数值越大偏移幅度越大),直接避开子图的标题区域。

修改后的代码示例:

#import libraries
library(ggplot2)
library(ggpubr)

#create data
data <- data.frame('type' = c('A', 'B', 'C'), 
                   'value' = c(1, 2, 3))
#create multiple figures with individual titles
fig1 <- ggplot(data, aes(x = type, y = value)) + 
  geom_point() +
  labs(title = 'Subtitle 1') +
  theme(plot.title = element_text(hjust = 0.5))

fig2 <- ggplot(data, aes(x = type, y = value*2)) + 
  geom_point() +
  labs(title = 'Subtitle 2') +
  theme(plot.title = element_text(hjust = 0.5))

fig3 <- ggplot(data, aes(x = type, y = value*3)) + 
  geom_point() +
  labs(title = 'Subtitle 3') +
  theme(plot.title = element_text(hjust = 0.5))
        
#arrange figures       
arrange_fig <- ggarrange(fig1, fig2, fig3, ncol=3)

#annotate plots with adjusted main title position
annotate_figure(arrange_fig,
  fig.lab = 'My Main Title',
  fig.lab.pos = 'top',
  fig.lab.y = 1.05  # 向上偏移主标题,可根据实际效果调整数值
)

方案2:增加子图的顶部边距

给每个子图的顶部预留更多空白空间,让主标题有足够的显示位置。通过theme()里的plot.margin参数调整,t代表顶部边距,单位默认是pt。

修改后的代码示例:

#import libraries
library(ggplot2)
library(ggpubr)

#create data
data <- data.frame('type' = c('A', 'B', 'C'), 
                   'value' = c(1, 2, 3))
#create figures with increased top margin
fig1 <- ggplot(data, aes(x = type, y = value)) + 
  geom_point() +
  labs(title = 'Subtitle 1') +
  theme(
    plot.title = element_text(hjust = 0.5),
    plot.margin = margin(t = 25, r = 10, b = 10, l = 10)  # 加大顶部边距
  )

fig2 <- ggplot(data, aes(x = type, y = value*2)) + 
  geom_point() +
  labs(title = 'Subtitle 2') +
  theme(
    plot.title = element_text(hjust = 0.5),
    plot.margin = margin(t = 25, r = 10, b = 10, l = 10)
  )

fig3 <- ggplot(data, aes(x = type, y = value*3)) + 
  geom_point() +
  labs(title = 'Subtitle 3') +
  theme(
    plot.title = element_text(hjust = 0.5),
    plot.margin = margin(t = 25, r = 10, b = 10, l = 10)
  )
        
#arrange figures       
arrange_fig <- ggarrange(fig1, fig2, fig3, ncol=3)

#annotate plots
annotate_figure(arrange_fig,
  fig.lab = 'My Main Title',
  fig.lab.pos = 'top'
)

方案3:改用ggarrange的top参数添加主标题

如果不需要annotate_figure的其他附加功能,直接用ggarrange()的top参数设置主标题,这种方式会自动调整整体布局,避免标题重叠。

代码示例:

#import libraries
library(ggplot2)
library(ggpubr)

#create data
data <- data.frame('type' = c('A', 'B', 'C'), 
                   'value' = c(1, 2, 3))
#create figures
fig1 <- ggplot(data, aes(x = type, y = value)) + 
  geom_point() +
  labs(title = 'Subtitle 1') +
  theme(plot.title = element_text(hjust = 0.5))

fig2 <- ggplot(data, aes(x = type, y = value*2)) + 
  geom_point() +
  labs(title = 'Subtitle 2') +
  theme(plot.title = element_text(hjust = 0.5))

fig3 <- ggplot(data, aes(x = type, y = value*3)) + 
  geom_point() +
  labs(title = 'Subtitle 3') +
  theme(plot.title = element_text(hjust = 0.5))
        
#arrange figures with main title
ggarrange(fig1, fig2, fig3, ncol=3,
          top = text_grob('My Main Title', face = 'bold', size = 14))

内容的提问来源于stack exchange,提问作者MorrisseyJ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:15:35