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

如何通过ggplot在图表下方放置多表并合理调整高度

解决ggplot组合折线图与表格时图表高度被压缩的问题

你可以通过两个关键调整来让折线图保持合理高度,同时缩小表格的占用空间:

1. 分配组件高度比例

在grid.arrange中使用heights参数,给折线图分配更多高度份额,表格分配更少。比如设置heights = c(2, 0.8, 0.8),表示折线图高度占2份,每个表格各占0.8份,比例可根据需求自行微调。

2. 压缩表格的冗余空间

  • 减小表格的上下边距:把plot.margin里的上下边距从2cm改成更小的值(比如0.5cm)
  • 减少y轴的扩展空间:把scale_y_discrete(expand = c(0, 3))中的3改成0.5,去掉表格上下的多余空白

修改后的完整代码

g1 <- ggplot(data = adlbsum, aes(x = reorder(avisit, avisitn), y = mean_chg)) +
  geom_point(aes(group=trta,color=trta), size = 1.5, position=position_dodge(width=0.7)) +
  geom_line(aes(group=trta,color=trta,linetype=trta), position=position_dodge(width=0.7)) +
  geom_errorbar(aes(x = avisit, ymin = CI_lower_chg, ymax = CI_upper_chg, color=trta),
                position=position_dodge(width=0.7)
                ) +
  theme_classic2() +
  theme(legend.position="bottom")

t1 <- ggplot(data=adlbsum) +
  geom_text(aes(y=trta, x=avisit, label=paste(as.character(mean_chg),as.character(mean_aval),sep='/'), hjust=1, vjust=0.5)) +
  ggtitle("Mean Change from Baseline/Mean Value") +
  scale_y_discrete(expand = c(0, 0.5), limits=rev) +  # 调整y轴扩展空间
  theme_classic(base_size=10) +
  theme(
    plot.margin = margin(0.5,.8,0.5,.8, "cm"),  # 缩小上下边距
    axis.line = element_blank(),
    axis.ticks  = element_blank(),
    axis.title.y  = element_blank(),
    axis.title.x  = element_blank(),
    axis.text.x = element_text(color="white"),
    plot.title = element_text(size=11, hjust =0)
  )

t2 <- ggplot(data=adlbsum) +
  geom_text(aes(y=trta, x=avisit, label=as.character(n), hjust=1, vjust=0.5)) +
  scale_y_discrete(expand = c(0, 0.5), limits=rev) +  # 调整y轴扩展空间
  theme_classic(base_size=11) +
  theme(
    plot.margin = margin(0.5,.8,0.5,.8, "cm"),  # 缩小上下边距
    axis.line = element_blank(),
    axis.ticks  = element_blank(),
    axis.title.y  = element_blank(),
    axis.title.x  = element_blank(),
    axis.text.x = element_text(color="white"),
    plot.title = element_text(size=11, hjust=0, vjust = 0.9)
  ) +
  labs(x=NULL, y=NULL) 

# 分配各组件高度比例
gridExtra::grid.arrange(g1, t1,t2, ncol=1, nrow=3, heights = c(2, 0.8, 0.8))

如果需要更紧凑的表格,还可以进一步缩小base_size或者调整hjust/vjust让文字更紧凑,也可以根据实际显示效果调整heights里的数值比例。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 14:15:57