RMarkdown中grid.arrange相对高度参数致大量空白问题求助
解决RMarkdown PDF中ggplot2图表并排后下方空白过多的问题
核心原因
grid.arrange的heights参数是控制整个布局容器的高度比例,而非图表本身的实际显示高度,容易导致容器预留过多空白;另外两个图表自身的绘图区域和边距设置不协调,也会加剧空白问题。
可行解决方案
方案1:用patchwork精准控制对齐与尺寸
虽然你试过patchwork,但可能没做垂直对齐和固定高度设置,试试这个:
library(patchwork) # 统一两个图的边距,避免布局错位 p_circular <- p_circular + theme(plot.margin = margin(5,5,5,5, "pt")) p_bar <- p_bar + theme(plot.margin = margin(5,5,5,5, "pt")) # 组合图表,设置宽度比例、固定高度,同时垂直对齐 combined_plot <- p_circular + p_bar + plot_layout(ncol = 2, widths = c(3,7), heights = unit(c(3,4), "cm"), # 直接设固定高度,比比例更精准 align = "v") # 垂直对齐防止上下错位
然后在代码块里加fig.height=4(可按需调整),直接限制整体图块高度,避免多余空白。
方案2:用grid包手动布局(最精准)
直接用底层的viewport控制每个图表的位置和大小,完全规避容器空白问题:
library(grid) grid.newpage() # 创建两个视口,分别放环形图和条形图 vp_circular <- viewport(x = 0.15, y = 0.5, width = 0.3, height = 0.6, just = c("center", "center")) vp_bar <- viewport(x = 0.6, y = 0.5, width = 0.7, height = 0.8, just = c("center", "center")) # 在对应视口绘制图表 print(p_circular, vp = vp_circular) print(p_bar, vp = vp_bar)
这种方式直接指定每个图表的显示区域,不会产生多余空白。
方案3:调整边距+knitr参数
- 先缩小图表内部边距:
p_circular <- p_circular + theme(plot.margin = margin(0,0,0,0, "pt")) p_bar <- p_bar + theme(plot.margin = margin(0,0,0,15, "pt")) # 保留右侧边距放数值标签
- 在代码块里设置
fig.height限制整体高度,比如:
```{r plotgrid, dependson="plot_data", fig.cap=NULL, fig.height=4} # 这里放组合代码,比如用grid.arrange但去掉heights参数,或者上面的方法
直接限制图块输出高度,让LaTeX不会预留多余空间。 ## 验证效果 修改后重新编织PDF,检查图表下方空白是否消失,同时确保两图并排整齐、垂直对齐。 内容的提问来源于stack exchange,提问作者isaid-hi
相关产品推荐
相关产品推荐

