我一直在尝试为包含ggplot2图的考试包在r markdown中创建一个考试题。

这里是一个代表:

```{r}
library(ggplot2)
library(tibble)
x <- data_frame(x = rnorm(100, 50, 25), y = x + rnorm(100, 0, 15))
```

Question
========
```{r}
ggplot(x) + geom_point(aes(x = x, y = y))
```

What is true about the plot?

Answerlist
----------
* The relationship is strong
* The relationship is weak

Solution
========
The relationship is strong.

Answerlist
----------
* True
* False

Meta-information
================
exname: scatterplot
extype: schoice
exsolution: 10
exshuffle: 2


如果我编织文档,则html页面将按原样预览图。

r - 考试包中是否支持ggplot2?-LMLPHP

但是,如果我使用exams2html()函数,则不会显示ggplot。

r - 考试包中是否支持ggplot2?-LMLPHP

我尝试了不同的方式来打印图表(例如将图表存储在变量中,然后打印或使用内联代码等),但没有任何实际效果。在r-exams.org网站或其他任何地方都找不到任何解决方案。
所以,我的问题是:我是否缺少某些东西,或者考试包中还没有ggplot2支持?

最佳答案

这与ggplot2无关。这是关于knitr中的一些默认值以及我这一边的疏忽。

tl; dr:现在在R-Forge(https://R-Forge.R-project.org/R/?group_id=1337)上的exams的开发版本中避免了该问题。安装此版本后,该示例应该可以正常运行:install.packages("exams", repos="http://R-Forge.R-project.org")

详细信息:代码块

```{r}
ggplot(x) + geom_point(aes(x = x, y = y))
```


已正确处理为grahics文件(如您在问题中已经显示的)。但是,生成的图形文件存储在子目录figure/中,而exams2xyz()函数不会在该子目录中搜索潜在的补充文件。而且由于实际的HTML文件与所有的.Rmd和.md临时文件都位于不同的目录中,所以找不到该图。

一种简单的解决方案是将当前目录用于所有补充而不是子目录。此外,我将关闭字幕:

```{r, fig.path = "", fig.cap = ""}
ggplot(x) + geom_point(aes(x = x, y = y))
```


通过此修改,exams2html()exams2pdf()都可以正常工作。请注意,编织文件(.md和图形)是在一个临时文件夹中生成的,而HTML是在另一个临时文件夹中生成的,因此这些都不会使您的工作空间混乱。

如果要在PDF输出中强制包含图形而没有浮动且没有标题,则需要在代码块之前包含\行。有关工作示例,请参见R / exams模板库中的http://www.R-exams.org/templates/scatterplot/(使用基本图形,但其他方面非常相似)。

我的疏忽:我已经在fig.path=""文件的考试包中通过knitr::opts_chunk$set()设置了.Rnw,但是忘记了对.Rmd文件执行相同的操作。开发版本中已对此进行了纠正。因此,您可以求助于此,也可以在练习中明确包含fig.path="",这也适用于CRAN发行版。

10-06 09:54