RMarkdown:将ggplot插入表中

时间:2020-06-02 13:33:26

标签: r ggplot2 r-markdown knitr

已经有一些问题在RMarkdown中考虑ggplots,但是没有一个问题回答了我的问题,即如何通过knitr用kable()将ggplot放入表中。 我已经尝试过此链接:

How can I embed a plot within a RMarkdown table?

但是到目前为止还没有任何运气。有什么想法吗?

想法是将所有地块放入列表中

a<-list(p1,p2,p3...)

然后在桌子上

{r}kable(a)

还应该包含其他文本

b<-("x","y","z",...)
kable (c(a,b),col.names=c())

感谢您的帮助

炸锅

2 个答案:

答案 0 :(得分:0)

我对此进行了一些尝试,以下是我能想到的最好的方法。这是一个完整的markdown文档,您应该可以将其粘贴到RStudio中并单击“编织”按钮。

此处有两个相关说明。

  • 将文件链接直接设置到kable无效,因为它被包裹在html中,因此它被解释为文本,因此我们需要将gsub()插入其中。另一种方法是设置kable(..., escape = FALSE) ,但其他文字可能会引起问题。
  • 此外,块选项results = 'asis'对于使print(kab)返回原始html是必需的。

我不知道这些对于实际应用程序是否有问题。

---
title: "Untitled"
author: "me"
date: "02/06/2020"
output: html_document
---

```{r, results = 'asis'}
library(ggplot2)
library(svglite)

n <- length(unique(iris$Species))
data <- split(iris, iris$Species)

# Create list of plots
plots <- lapply(data, function(df) {
  ggplot(df, aes(Sepal.Width, Sepal.Length)) +
    geom_point()
})

# Create temporary files
tmpfiles <- replicate(n, tempfile(fileext = ".svg"))

# Save plots as files, get HTML links
links <- mapply(function(plot, file) {
  # Suit exact dimensions to your needs
  ggsave(file, plot, device = "svg", width = 4, height = 3)
  paste0('<figure><img src="', file, '" style = "width:100%"></figure>')
}, plot = plots, file = tmpfiles)

# Table formatting
tab <- data.frame(name = names(plots), fig = paste0("dummy", LETTERS[seq_len(n)]))
kab <- knitr::kable(tab, "html")

# Substitute dummy column for figure links
for (i in seq_len(n)) {
  kab <- gsub(paste0("dummy", LETTERS[i]), links[i], kab, fixed = TRUE)
}
print(kab)
```

答案 1 :(得分:0)

我已经找到了解决方法,如我发布的链接所述。

I。将我的情节另存为图片 二。使用sprintf()通过Rmarkdown的以下命令将图片插入表中: ![](path/to/file)

可怜,但是行得通。如果有人找到解决方案,我将始终对智能编码感兴趣。