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

R语言使用ggplot与patchwork绘制嵌套图时如何正确居中标签

解决方案

你可以通过给每个顶层拼接块单独添加专属标题的方式实现需求,该方案既可以保证两个面板的标题各自在对应块的宽度内居中,也不会覆盖内部子图的原有标题。

完整可运行代码
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')

# 顶部单图添加自身的面板标题,居中设置仅作用于该图
ptop <- p1 + 
  ggtitle("(a) Panel a") +
  theme(plot.title = element_text(hjust = 0.5, size = 30))

# 底部四图拼接为独立patchwork,给该拼接块整体添加专属标题
pbot <- (p1 + p2 + p3 + p4) +
  plot_annotation(
    title = "(b) Panel b",
    theme = theme(plot.title = element_text(hjust = 0.5, size = 30))
  )

# 最终拼接仅需设置布局和全局图例
combined <- ptop + pbot +
  plot_layout(ncol = 1, guides = "collect") &
  theme(legend.position = "bottom")

combined
代码说明
  • 顶部单图ptop的标题直接绑定自身的绘图宽度,设置hjust=0.5即可完美居中
  • 底部四图拼接块pbot作为独立的patchwork对象,其plot_annotation添加的标题会自动匹配四图拼接后的总宽度居中,定位逻辑完全独立于顶部面板
  • 标题参数仅作用于对应顶层块本身,不会向内覆盖内部四个子图的标题设置,解决了之前子图标题消失的问题
  • 无需调整全局标签参数,避免了patchwork全局标签定位不匹配不同宽度子块的问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:06:03