如果我设置 echo=FALSE,R Markdown 会使自定义绘图消失
R Markdown makes custom plot disappear if I set echo=FALSE
我创建了一个自定义函数,将 mfrow 设置为 nxn 并创建 n^2 散点图,每个图上有多个数据集,基于数据框的输入列表。我的绘图函数的签名如下所示:
plot.return.list<-function(df.list,num.plot,title)
其中df.list
是我的数据框列表,num.plot
是要生成的图总数(用于设置mfrow
),title
是整体绘图标题(该函数为每个人生成标题 sub-graph)。
当我从控制台 运行 函数时,这可以很好地创建绘图。但是,我正在尝试使用 RStudio 将此图放入降价文档中,如下所示:
```{r, fig.height=6,fig.width=6}
plot.return.list(f.1.list,4,bquote(atop("Numerical Approximations vs Exact Soltuions for "
,dot(x)==-1*x*(t))))
```
因为我没有在我的 {r}
语句中设置 echo
选项,所以这会打印绘图代码和绘图本身。但是,如果我的第一行改为:
{r, fig.height=6,fig.width=6,echo=FALSE}
然后代码和情节都从最终文档中消失了。
如何在没有代码的情况下显示情节?根据 RStudio 给出的示例,设置 echo=FALSE
应该使情节在没有代码的情况下出现,但这不是我观察到的行为。
编辑: 我似乎已经将我的问题追溯到 kable
。无论我是否正在制作自定义 plot-helper 函数,对 kable
的任何调用都会破坏我的情节。这可以在降价中复制:
---
title: "repro"
author: "Frank Moore-Clingenpeel"
date: "October 9, 2016"
output: pdf_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(knitr)
options(default=TRUE)
repro.df<-data.frame((0.1*1:10)%*%t(1:10))
```
```{r, echo=FALSE}
kable(repro.df)
```
```{r, fig.height=6,fig.width=6,echo=FALSE}
plot(repro.df[,1],repro.df[,2])
```
在这段代码中,由于我将 echo
设置为 false,因此不会绘制该图;删除标志使情节可见
另请注意,在我的重现代码中,kable
在最后一行生成了带有一堆垃圾的 table——我不知道为什么,但对于我的完整原始代码,我认为这与我的问题无关。
感谢您提供可重现的示例。从这里我可以看出问题是你的 table 块和你的 plot 块之间没有换行符。
如果你要编织它并检查 knit 生成的 MD 文件(或将 html_document
设置为你的输出格式并让 keep_md: true
查看它),你会看到 table代码和剧情代码之间没有任何换行符。 Pandoc 需要这个来分隔 table 的结尾。没有它,它认为您的 
是 table 的一部分,因此将其作为 "junk line" 放在 table 中而不是单独的图像。
只需在两个块之间添加一个换行符就可以了。 (表格需要用空行包围)。
(我知道您正在编译为 LaTeX,所以您可能会混淆为什么我在谈论降价。如果确实如此,当您执行 Rmd -> PDF 时,Rmarkdown 使用 knit
从 RMD 到MD,然后 pandoc
从 MD 到 tex。这就是为什么你仍然需要确保你的 markdown 看起来不错)。
我创建了一个自定义函数,将 mfrow 设置为 nxn 并创建 n^2 散点图,每个图上有多个数据集,基于数据框的输入列表。我的绘图函数的签名如下所示:
plot.return.list<-function(df.list,num.plot,title)
其中df.list
是我的数据框列表,num.plot
是要生成的图总数(用于设置mfrow
),title
是整体绘图标题(该函数为每个人生成标题 sub-graph)。
当我从控制台 运行 函数时,这可以很好地创建绘图。但是,我正在尝试使用 RStudio 将此图放入降价文档中,如下所示:
```{r, fig.height=6,fig.width=6}
plot.return.list(f.1.list,4,bquote(atop("Numerical Approximations vs Exact Soltuions for "
,dot(x)==-1*x*(t))))
```
因为我没有在我的 {r}
语句中设置 echo
选项,所以这会打印绘图代码和绘图本身。但是,如果我的第一行改为:
{r, fig.height=6,fig.width=6,echo=FALSE}
然后代码和情节都从最终文档中消失了。
如何在没有代码的情况下显示情节?根据 RStudio 给出的示例,设置 echo=FALSE
应该使情节在没有代码的情况下出现,但这不是我观察到的行为。
编辑: 我似乎已经将我的问题追溯到 kable
。无论我是否正在制作自定义 plot-helper 函数,对 kable
的任何调用都会破坏我的情节。这可以在降价中复制:
---
title: "repro"
author: "Frank Moore-Clingenpeel"
date: "October 9, 2016"
output: pdf_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(knitr)
options(default=TRUE)
repro.df<-data.frame((0.1*1:10)%*%t(1:10))
```
```{r, echo=FALSE}
kable(repro.df)
```
```{r, fig.height=6,fig.width=6,echo=FALSE}
plot(repro.df[,1],repro.df[,2])
```
在这段代码中,由于我将 echo
设置为 false,因此不会绘制该图;删除标志使情节可见
另请注意,在我的重现代码中,kable
在最后一行生成了带有一堆垃圾的 table——我不知道为什么,但对于我的完整原始代码,我认为这与我的问题无关。
感谢您提供可重现的示例。从这里我可以看出问题是你的 table 块和你的 plot 块之间没有换行符。
如果你要编织它并检查 knit 生成的 MD 文件(或将 html_document
设置为你的输出格式并让 keep_md: true
查看它),你会看到 table代码和剧情代码之间没有任何换行符。 Pandoc 需要这个来分隔 table 的结尾。没有它,它认为您的 
是 table 的一部分,因此将其作为 "junk line" 放在 table 中而不是单独的图像。
只需在两个块之间添加一个换行符就可以了。 (表格需要用空行包围)。
(我知道您正在编译为 LaTeX,所以您可能会混淆为什么我在谈论降价。如果确实如此,当您执行 Rmd -> PDF 时,Rmarkdown 使用 knit
从 RMD 到MD,然后 pandoc
从 MD 到 tex。这就是为什么你仍然需要确保你的 markdown 看起来不错)。