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

ggplot2实现:如何让列内堆叠多面板图共享Y轴标题

实现跨列共享Y轴标题的四面板图

要实现每列共享一个Y轴标题,你可以通过隐藏子图的Y轴标题,再单独创建垂直文本标题,结合patchwork的布局功能来实现。具体步骤如下:

1. 修改子图,隐藏重复Y轴标题

将四个子图的labs(y = ...)替换为labs(y = NULL),去掉重复的Y轴标签:

# 修改fig1a
fig1a <- site1 %>%
  ggplot() +
  geom_line(aes(x = Date, y = Air), color = "red", size = 1) +
  geom_line(aes(x = Date, y = Water), size = 1, alpha = 0.7) +
  scale_x_date(date_breaks = "2 month",
               date_labels = "%b",
               expand = c(0, 0)) +
  labs(x = NULL, y = NULL)  # 隐藏Y轴标题
  # 其余原有注释、主题设置等代码保持不变

# 修改fig1b
fig1b <- site2 %>%
  ggplot() +
  geom_line(aes(x = Date, y = Air), color = "red", size = 1) +
  geom_line(aes(x = Date, y = Water), size = 1, alpha = 0.7) +
  scale_x_date(date_breaks = "2 month",
               date_labels = "%b",
               expand = c(0, 0)) +
  labs(x = NULL, y = NULL)  # 隐藏Y轴标题
  # 其余原有注释、主题设置等代码保持不变

# 修改fig1c
fig1c <- site1 %>%
  ggplot() +
  geom_line(aes(x = Date, y = Difference), size = 1) +
  scale_x_date(date_breaks = "2 month",
               date_labels = "%b",
               expand = c(0, 0)) +
  labs(x = NULL, y = NULL)  # 隐藏Y轴标题
  # 其余原有注释、主题设置等代码保持不变

# 修改fig1d
fig1d <- site2 %>%
  ggplot() +
  geom_line(aes(x = Date, y = Difference), size = 1) +
  scale_x_date(date_breaks = "2 month",
               date_labels = "%b",
               expand = c(0, 0)) +
  labs(x = NULL, y = NULL)  # 隐藏Y轴标题
  # 其余原有注释、主题设置等代码保持不变

2. 创建跨列的垂直Y轴标题

用ggplot()生成两个仅含垂直文本的空图,作为每列的共享标题:

# 左列共享标题:温度(℃)
left_col_title <- ggplot() +
  geom_text(
    aes(x = 0, y = 0),
    label = expression(paste("Temperature ( ", degree, "C)")),
    size = 6,
    angle = 90  # 设置文本垂直显示
  ) +
  theme_void()  # 移除所有绘图边框、刻度等元素

# 右列共享标题:温度差(℃)
right_col_title <- ggplot() +
  geom_text(
    aes(x = 0, y = 0),
    label = expression(paste(Delta~" Temperature ( ", degree, "C)")),
    size = 6,
    angle = 90
  ) +
  theme_void()

3. 组合所有图并调整布局

使用patchwork::wrap_plots()将标题和子图按3列布局排列,调整标题列与子图列的宽度比例,确保标题与子图对齐:

library(patchwork)

wrap_plots(
  left_col_title, right_col_title,  # 第一行:两列的共享标题
  fig1a, fig1c,                     # 第二行:Site 1的两个子图
  fig1b, fig1d,                     # 第三行:Site 2的两个子图
  ncol = 3,
  widths = c(1, 10, 10)  # 标题列宽度占比1,子图列占比10,可按需调整
)

效果说明

  • 左列两个子图共享同一个垂直温度标题,右列共享温度差标题,避免重复;
  • 完全保留你原有代码中的自定义图例、标注和样式设置;
  • 宽度比例可根据最终绘图尺寸灵活调整,确保标题位置美观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 19:25:40