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

使用patchwork保留ggplot的xlab/ylab并设置公共坐标轴标签可行吗?

用Patchwork给多幅ggplot图添加公共坐标轴标签(无需逐个移除原有轴标签)

当然可以用Patchwork实现这个需求,完全不需要逐个修改子图的轴标签配置,同时能保留Patchwork的速度优势,替代运行较慢的ggarrange。下面提供两种实用方案:

方案一:通过布局嵌套空图实现公共标签

这种方法直观易调整标签位置,适合需要灵活控制标签大小和位置的场景:

library(tidyverse)
library(patchwork)

# 保留原有图形的xlab/ylab设置,无需修改
gg1 = ggplot(mtcars) +
  aes(x = cyl, y = disp) +
  geom_point() +
  xlab("Disp") +
  ylab("Hp // Cyl")

gg2 = gg1 %+% aes(x = hp) +
  xlab("Disp") +
  ylab("Hp // Cyl")

# 创建仅包含轴标签的空图
y_axis_label <- ggplot() +
  geom_text(aes(x = 1, y = 1, label = "Hp // Cyl"), angle = 90, size = 4) +
  theme_void() # 清空主题元素

x_axis_label <- ggplot() +
  geom_text(aes(x = 1, y = 1, label = "Disp"), size = 4) +
  theme_void()

# 组合布局:左侧放y轴标签,中间放子图,底部放x轴标签
y_axis_label + 
  (gg1 + gg2 & theme(axis.title = element_blank())) + # 统一隐藏子图的轴标题
  x_axis_label +
  plot_layout(
    ncol = 2, nrow = 2,
    widths = c(0.1, 0.9),  # 控制y标签和子图的宽度比例
    heights = c(0.9, 0.1)  # 控制子图和x标签的高度比例
  )

方案二:用inset_element嵌入标签(更紧凑)

如果不需要额外调整布局比例,用inset_element直接在组合图上添加公共标签更简洁:

library(tidyverse)
library(patchwork)

gg1 = ggplot(mtcars) +
  aes(x = cyl, y = disp) +
  geom_point() +
  xlab("Disp") +
  ylab("Hp // Cyl")

gg2 = gg1 %+% aes(x = hp) +
  xlab("Disp") +
  ylab("Hp // Cyl")

# 组合子图并统一隐藏轴标题,再嵌入公共标签
gg1 + gg2 +
  theme(axis.title = element_blank()) & # 统一应用到所有子图
  inset_element(
    grid::textGrob("Hp // Cyl", rot = 90, gp = grid::gpar(fontsize = 12)),
    left = 0.01, bottom = 0.5, right = 0.06, top = 0.5 # 调整y标签位置
  ) +
  inset_element(
    grid::textGrob("Disp", gp = grid::gpar(fontsize = 12)),
    left = 0.5, bottom = 0.01, right = 0.5, top = 0.06 # 调整x标签位置
  )

关键说明

  • 两种方案都不需要逐个修改子图的xlab/ylab或theme配置,通过&符号可以一次性给所有子图应用隐藏轴标题的设置。
  • 方案一的布局比例可以通过widths和heights灵活调整,适合复杂排版;方案二更紧凑,适合快速生成组合图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 07:06:34