我刚找到了一篇关于这个的好博客文章。
在Michael J Williams'的博客中阅读更多内容 - 我无耻地窃取了代码,所以那里有更多细节。 记得将整块选项设置为results = "asis"。
假设你想要使用循环输出一堆图形,但是你希望它们各自具有不同的大小。请定义以下函数(再次强调,我只是复制粘贴这里的内容):
subchunkify <- function(g, fig_height=7, fig_width=5) {
g_deparsed <- paste0(deparse(
function() {g}
), collapse = '')
sub_chunk <- paste0("
`","``{r sub_chunk_", floor(runif(1) * 10000), ", fig.height=",
fig_height, ", fig.width=", fig_width, ", echo=FALSE}",
"\n(",
g_deparsed
, ")()",
"\n`","``
")
cat(knitr::knit(text = knitr::knit_expand(text = sub_chunk), quiet = TRUE))
}
像这样使用函数,定义自己的图形大小:
```{r echo=FALSE, results='asis'}
g <- ggplot(economics, aes(date, unemploy)) +
geom_line()
subchunkify(g, 10, 3)
subchunkify(g, 7, 7)
```
或者让数据定义尺寸:
```{r echo=FALSE, results='asis'}
g <- ggplot(economics, aes(date, unemploy)) +
geom_line()
for (i in seq(2, 5)) {
subchunkify(g, i / 2, i)
}
```
在这篇文章中,Michael警告说你必须小心:
因为我们使用了results='asis',所以如果我们想要从代码块中输出文本、标题或其他任何内容,我们必须使用原始HTML而不是Markdown,并且我们必须使用cat()来实现,而不是print()。例如:
g <- ggplot(economics, aes(date, unemploy)) +
geom_line()
cat('<h2>A Small Square Plot</h2>')
subchunkify(g, 3, 3)
再次强调,这不是我的工作......去那个美好的博客文章获取更多细节。希望这对你有用。
knitr
必须在执行代码块之前打开一个图形设备(具有适当的大小),因此您必须在先前的代码块中评估代码以便在后续的代码块中使用这些对象。 - Yihui Xie