已经有一些问题在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())
感谢您的帮助
炸锅
答案 0 :(得分:0)
我对此进行了一些尝试,以下是我能想到的最好的方法。这是一个完整的markdown文档,您应该可以将其粘贴到RStudio中并单击“编织”按钮。
此处有两个相关说明。
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)
可怜,但是行得通。如果有人找到解决方案,我将始终对智能编码感兴趣。