如何在R markdown中制作多个具有不同高度的图表?

3

我正在使用 Rmarkdown 自动化生成一堆图形。我有如下代码:

```{r make_plots}
for (a_ggplot in a_bunch_of_ggplots()) {
    print(a_ggplot)
}
```

我希望使图形的高度不同。通常我会在代码块标题中使用 fig.height 来设置高度。我尝试过将 fig.height 用向量表示,但没有成功。(我认为它只是使用了最后一个值。)
如何使图形高度不同?
另外,我想添加一些文档头。我计划尝试这个答案中的技巧(生成原始标记,并使用 results='asis')。如果您的解决方案能够兼容这个技巧,则赠送额外积分!
编辑:也许我可以将图形保存为图像,然后使用include_graphics。这似乎是一种取巧的方式。更糟糕的是,它们将被光栅化,因此无法进行缩放。但这是一个想法。
1个回答

1
最好使用 .pdf 格式,因为该格式设计为缩放时不会更改。您可以简单地使用 for 循环或可能更好的 Map 来创建图形,然后使用 cat 生成“原样” LaTeX 代码。我在这里使用基本图形,我相信您也可以使用 ggplot2 进行此操作。在 Map 周围包装一个 invisible 来省略控制台输出。
---
title: "Untitled"
output: pdf_document
header-includes:
- \usepackage{lipsum}  % just used for sample loremipsum text
---

\lipsum[1]

```{r plots, echo=FALSE, results="asis"}

what <- rep("AirPassengers", 4)  ## mimicking multiple plots

invisible(Map(function(w) {
  pdf(file=paste0(w, ".pdf"))
  plot(get(w))
  dev.off()
}, what))

heights <- c(2, 4, 6, 8)  ## define heights for each plot

invisible(Map(function(w, h) cat(
"
\\begin{figure}[ht]
\\includegraphics[height=", paste0(h, "cm"), "]{", paste0(w, ".pdf"), "}
\\caption{", w, "}\\label{fig:", w, "}
\\end{figure}
", sep=""), what, heights))

```

\lipsum[1]

产生:

enter image description here

如果您只想要不同的高度,您可以在第一个Map调用中指定尺寸,例如使用第二个参数来设置宽度,并在第二个调用中使用常量高度/宽度。


这看起来很棒,谢谢。我已经实现了我的“hack”,但我会尽快尝试这个! - dfrankow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接