如何通过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
相关产品推荐
相关产品推荐

