如何在RMarkdown表中嵌入一个图?

时间:2016-09-07 05:59:27

标签: r plot knitr r-markdown

我正在尝试在RMarkdown中生成报告模板。在本报告中,我想在单元格中的一个图表旁边有我正在使用的调查问题的数量和文本。我生成了一些示例图,并在MS Word中制作了以下示例。是否可以在RMarkdown的表中放置一个R生成的图?

如果代码是什么样的代码?

Desired output

编辑(9/8/16):我现在正在包含.Rmd文件。问题是html文件无法使用以下消息进行编译。

force push

Template1是文件名,score_table是块标签。

有人愿意帮我诊断问题吗?

pandoc: Could not fetch Template1_files/figure-html/score_table-1.png
Template1_files/figure-html/score_table-1.png: openBinaryFile: does not exist (No such file or directory)
Error: pandoc document conversion failed with error 67
Execution halted

1 个答案:

答案 0 :(得分:4)

您可以执行以下操作(对于基础图,用于ggplot2图 - 请参见最底部的评论):

```{r mychunk, fig.show = "hide", echo = FALSE, fig.height=3, fig.width=5}
library(knitr)
# sample data
dat <- data.frame(
  text = sapply(1:10, FUN = function(x) { paste0(sample(x = LETTERS, size = 15), collapse = "") }), 
  x1 = rnorm(10), 
  x2 = rnorm(10, mean = 3), 
  x3 = rnorm(10, mean = 5))

# generate plots
invisible(apply(dat[, 2:4], MARGIN = 1, FUN = boxplot))

out <- cbind(row.names(dat), 
             as.character(dat$text), 
             sprintf("![](%s%s-%s.png)", opts_current$get("fig.path"), opts_current$get("label"), 1:nrow(dat)))
kable(out, col.names = c("ID", "Text", "Boxplot"))
```
  • apply(dat[, 2:4], MARGIN = 1, FUN = boxplot)使用x1x2x3中的数据生成箱图。由于fig.show="hide",这些数字已生成但未包含在文档中。
  • sprintf("![](%s%s-%s.png)", opts_current$get("fig.path"), opts_current$get("label"), 1:nrow(dat))生成降价语法以包含图表。这类似于calling include_graphics,但其优点是我们将降价作为字符向量。
  • 最后,kable生成表格。

或者,您可以使用Pandoc&#39; pipe_table as shown here手动生成表格,这样可以提供更多灵活性。

上面代码的输出:

Figure in table

Gregor's answer here显示了如何将其应用于ggplot2图:按元素打印list元素返回的apply,即invisible(apply(...))变为invisible(lapply(apply(...), print)) }。