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

如何拼接ggplot2的p1与p2图以近似facet_wrap生成的Desired_plot效果?

将多个ggplot2图形拼接为类似分面的效果

要把独立绘制的p1和p2拼接成接近Desired_plot的外观,推荐使用patchwork包——它专门针对ggplot2图形的拼接,能轻松实现统一坐标轴、模拟分面标题条带的需求。

步骤1:安装并加载patchwork

install.packages("patchwork")
library(patchwork)
library(ggplot2)

步骤2:调整子图样式

对p1和p2进行调整,统一y轴范围(确保点的垂直位置和分面图一致),添加灰色背景的标题条(模拟分面的vs值标签),并移除各自的y轴标签:

# 调整p1
p1_adj <- p1 + 
  labs(title = "vs = 0", y = NULL) +
  scale_y_continuous(limits = c(-0.2, 1.2), breaks = c(0, 1)) +
  theme(
    plot.title = element_text(
      hjust = 0.5, 
      margin = margin(b = 5), 
      padding = margin(5, 0, 5, 0), 
      color = "black", size = 10, face = "bold",
      background = "grey85"
    )
  )

# 调整p2
p2_adj <- p2 + 
  labs(title = "vs = 1", y = NULL) +
  scale_y_continuous(limits = c(-0.2, 1.2), breaks = c(0, 1)) +
  theme(
    plot.title = element_text(
      hjust = 0.5, 
      margin = margin(b = 5), 
      padding = margin(5, 0, 5, 0), 
      color = "black", size = 10, face = "bold",
      background = "grey85"
    )
  )

步骤3:拼接图形并统一坐标轴

使用patchwork的语法拼接两个调整后的子图,添加统一的x轴和y轴标签:

combined_plot <- p1_adj + p2_adj +
  plot_layout(ncol = 2) +  # 设置为两列布局
  plot_annotation(xlab = "mpg", ylab = "vs") &  # 统一坐标轴标签
  theme(
    axis.title.x = element_text(margin = margin(t = 10)),
    axis.title.y = element_text(margin = margin(r = 10))
  )

# 查看最终效果
combined_plot

效果说明

调整后的拼接图和Desired_plot几乎一致:

  • 共享统一的x轴(mpg)和y轴(vs)标签
  • 每个子图上方有灰色条带显示对应的vs值
  • 点的位置和分面图完全对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:20:44