在Rmarkdown的任何位置打印保存在环境中的图

dpiehjr4  于 2023-01-15  发布在  其他
关注(0)|答案(3)|浏览(119)

我创建了一个Rmarkdown文档,我想在文档的开头创建一个绘图,然后在文档的结尾打印它。
我认为实现此目的的最佳方法是将情节保存在环境中,然后稍后再调用它,我将其保存为:

plot(1:5, 1:5) ; plot1 <- recordPlot()                # I create a plot and save it as plot1

此图保存在环境中的“数据”下。
如果我在控制台中输入plot 1,我的图将重现,但当我尝试直接在Rmarkdown中显示它时,如下所示,我得到以下错误:

plot(plot1)

Error in xy.coords(x, y, xlabel, ylabel, log) :
  'x' is a list, but does not have components 'x' and 'y'

如何将保存到Data中的图打印到Rmarkdown文档中的任意位置?
另外,我知道在本文档后面再次重复该图很有诱惑力,但构建该图的参数随后会在我的分析的另一部分中更改。
可重现示例:

x = 1

plot_later <- function() {
  plot(x)
}

plot_later()

x = -10

plot_later()

X从1开始,然后在Y轴上变为-10,我希望它保持初始值1。

d6kp6zgx

d6kp6zgx1#

基于https://bookdown.org/yihui/rmarkdown-cookbook/reuse-chunks.html的解决方案:

---
title: plot now, render later
output: html_document
---

We put some plot expression here to evaluate it later:
```{r, deja-vu, eval=FALSE}
x = 1
plot(x)

Here we change x - but only within the corresponding chunk's scope:

x = 10

... moving on

Here, we evaluate and plot the expression defined earlier; x is taken from that chunk's scope, so it still evaluates to 1:


![](https://i.stack.imgur.com/JRuJJ.jpg)
8wigbo56

8wigbo562#

一个选项是使用ggplotify中的as.grob函数将绘图保存为grob对象,然后在其他地方打印。

---
title: "Saving A Plot"
output: html_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)

R Markdown

library(ggplotify)
library(grid)

show_captured_plot <- function(grb) {
  grid::grid.newpage()
  grid::grid.draw(grb)
}
x <- 1

p <- as.grob(~plot(x))

Now we can plot the figure here.

x <- 10

show_captured_plot(p)

![](https://i.stack.imgur.com/Bie2I.png)
bvjxkvbb

bvjxkvbb3#

在这里,查看以下链接:https://bookdown.org/yihui/rmarkdown-cookbook/fig-chunk.html
它有很多关于如何开始使用rmarkdown的说明。
明确回答你的问题:
我们在此代码块中生成一个图,但不显示它:

```{r cars-plot, dev='png', fig.show='hide'}
plot(cars)

又过了一段,我们介绍剧情:

![A nice plot.](r knitr::fig_chunk('cars-plot', 'png'))


基本上,您必须将图形保存为变量,然后使用`knitr::fig_chunk()`函数调用它。

相关问题