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

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参数

  1. 先缩小图表内部边距:
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"))  # 保留右侧边距放数值标签
  1. 在代码块里设置fig.height限制整体高度,比如:
```{r plotgrid, dependson="plot_data", fig.cap=NULL, fig.height=4}
# 这里放组合代码,比如用grid.arrange但去掉heights参数,或者上面的方法
直接限制图块输出高度,让LaTeX不会预留多余空间。

## 验证效果
修改后重新编织PDF,检查图表下方空白是否消失,同时确保两图并排整齐、垂直对齐。

内容的提问来源于stack exchange,提问作者isaid-hi
相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:21:08