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
相关产品推荐
相关产品推荐

