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

Knitr中multicol环境下表格与绘图的顶部对齐问题

解决Knitr PDF中表格与ggsurvminer图的顶部对齐问题

核心问题原因

ggsurvminer生成的ggplot图默认会被包装为LaTeX的figure浮动环境,而表格是直接输出的静态内容,在multicol环境下浮动体会脱离布局流,导致位置偏移甚至覆盖页眉;同时ggplot默认的顶部边距与表格不一致,进一步加剧了对齐偏差。

具体修复方案

1. 用minipage替代multicol实现可控并排

minipage是固定位置的布局容器,能避免浮动体的布局问题,同时精确控制两栏宽度,确保内容顶部对齐。

2. 调整ggplot的顶部边距

消除ggsurvminer图的默认顶部空白,让图的顶部与表格顶部对齐。

3. 强制图固定位置

在R chunk参数中添加fig.pos="H",禁止图浮动,确保它留在当前布局位置。

修改后的完整代码

```{r config, include=FALSE}
newslide <- function(content) {
  code <- deparse(substitute(content))

  cat(sep = "\n",
    knitr::knit_child(
      quiet = TRUE,
      text = c("```{r dpi=600, warning=FALSE, message=FALSE, echo=FALSE, results='asis', fig.pos='H', fig.align='center'}",
    code, 
    "```")
      )
  )
}
library(survival)
library(ggsurvminer)
library(knitr)

plot_list <- list()
category <- c("A","B","C")

for (cat in category){
  fit <- survfit(Surv(time, status) ~ sex, data = lung)
  # 调整图的顶部边距,消除默认空白
  p <- ggsurvplot(fit, data = lung)$plot +
    theme(plot.margin = margin(t = 5, r = 10, b = 10, l = 10, unit = "pt"))
  plot_list[[cat]] <- p
}


for (cat in category){
  plot1 <- plot_list[[cat]]
  # 生成优化格式的表格
  table1_latex <- kable(head(lung), format = "latex", booktabs = TRUE)
  newslide(
    content = {
      # 双minipage实现并排布局
      cat("\\begin{minipage}{0.48\\linewidth}\n")
      print(table1_latex)
      cat("\\end{minipage}\n")
      cat("\\hfill\n")
      cat("\\begin{minipage}{0.48\\linewidth}\n")
      print(plot1)
      cat("\\end{minipage}\n")
    }
  )
}
### 额外微调建议
- 如果表格顶部仍有多余空白,可在表格前添加`\\vspace{-5pt}`手动调整:
  ```latex
  cat("\\vspace{-5pt}\n")
  print(table1_latex)
  • 若坚持使用multicol环境,可在输出图前添加\\vspace{\\baselineskip}调整起始位置,同时保留fig.pos="H"参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 11:53:13