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

如何用ggarrange减少多图空白?保留对齐与标签功能

解决ggarrange组合多图时图间空白过大且保留对齐/标签功能的问题

要实现共享x轴、图间几乎紧贴,同时保留ggarrange的对齐和标签功能,核心是用负margin抵消ggplot隐藏轴后的残留空间,配合调整ggarrange的参数。以下是修改后的完整代码:

library(ggplot2)
library(ggpubr)

x<-seq(1,10)
y<-seq(10,1)
DF<-data.frame(x,y)

p1<- ggplot(DF, aes(x=x,y=y)) + 
  labs(x="Xlab", y="Ylab") +
  geom_line()+
  theme_bw()

# 顶部图:隐藏x轴所有元素,底部设负margin抵消残留空间
p1TopNoX<-p1 + theme(
  axis.title.x=element_blank(),
  axis.text.x=element_blank(),
  axis.ticks.x=element_blank(),
  axis.line.x=element_blank(), # 移除x轴线,避免视觉残留
  plot.margin = margin(1, 1, -0.8, 0, "cm")
)

# 中间图:上下都设负margin,同时隐藏x轴
p1MidNoX<-p1 + theme(
  axis.title.x=element_blank(),
  axis.text.x=element_blank(),
  axis.ticks.x=element_blank(),
  axis.line.x=element_blank(),
  plot.margin = margin(-0.8, 1, -0.8, 0, "cm")
)

# 底部图:顶部设负margin,保留x轴
p1BotX<-p1 + theme(
  plot.margin = margin(-0.8, 1, 1, 0, "cm")
)

# 组合图形:垂直对齐,调整标签位置避免遮挡
ggarrange(p1TopNoX, p1MidNoX, p1BotX,
          nrow=3, 
          labels = c("A","B", "C"), 
          align= 'v',
          hjust=-0.1, vjust=1.2,
          font.label=list(color="black",size=25)
)

关键修改说明

  • 负margin抵消空间:ggplot隐藏x轴元素后,仍会保留原轴的占位空间,通过设置负的plot.margin可以直接抵消这些空间,让图与图之间紧贴。
  • 移除x轴线:添加axis.line.x=element_blank(),彻底清除x轴的视觉残留,避免出现“看似紧贴但有线条分隔”的问题。
  • 优化标签位置:原代码的hjust=-4.5会让标签偏离图很远,调整为接近0的负数,既能让标签在图外,又不会过度偏移。
  • 简化对齐参数:单列纵向排列时,align='v'(垂直对齐)足够,align='hv'中的横向对齐是冗余的,不影响结果但可以简化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:55:59