我想在闪亮的仪表板中创建项目的word文档。仪表板包含由ggplot和htmlwidgets生成的文本,图表。
单词文档的生成是通过Rmarkdown完成的,当我包含文本和ggplots时它很顺利。我正在努力与htmlwidgets。我试图将htmlwidget生成的html直接包含在文档中,但它不起作用。当我选择输出时,它确实有效" html_document"而不是" word_document"。 包括一些元素,但其他一些元素似乎被忽略了。下面只是一个简单的例子,链接和图像没有出现在word文档中。有什么想法吗?
mtcars_split <-
mtcars %>%
split(mtcars$cyl)
plots <-
mtcars_split %>%
map(~ ggplot(data=.,mapping = aes(y=mpg,x=wt)) +
geom_jitter()
# + ggtitle(....))
plots
答案 0 :(得分:1)
感谢@romles的建议,以下是我的工作方式 它与我之前的例子有点不同,因为我在R代码中生成了rmarkdown字符串。
library(htmlwidgets)
library(webshot)
library(canvasXpress)
rpt <- c("---",
"title: htmlwidget output",
paste("output: ", " word_document"),
"---")
tmp_html <- tempfile(fileext = ".html")
tmp_image <- tempfile(fileext = ".png")
tmp_md <- "out.md"
out_docx <- "out.docx"
data <- t(iris[,1:4])
varAnnot <- as.matrix(iris[,5])
colnames(varAnnot) <- "Species"
widget <- canvasXpress(t(data),
varAnnot = varAnnot,
graphType = 'Scatter3D',
colorBy = 'Species')
saveWidget(widget, tmp_html, selfcontained = FALSE)
webshot(tmp_html,
file = tmp_image,
vwidth = widget$width,
vheight = widget$height)
image_md <- paste0("![](", tmp_image, ")")
rpt <- c(rpt, image_md)
report.md <- knitr::knit(text = rpt, output = tmp_md)
rmarkdown::render(input = tmp_md,
output_format = "word_document",
output_file = out_docx)
答案 1 :(得分:1)
我认为@ginberg解决方案可以通过更简单的方式进行简化:自knitr
v1.13起,HTML小部件将使用webshot
包自动呈现为快照。
<强>设置强>
首先,需要安装webshot
和phantomjs
:
install.packages("webshot")
webshot::install_phantomjs()
自动转换htmlwidgets
library(magrittr)
library(canvasXpress)
library(rmarkdown)
tmp_rmd <- "out.Rmd"
data <- t(iris[,1:4])
varAnnot <- as.matrix(iris[,5])
colnames(varAnnot) <- "Species"
widget <- canvasXpress(t(data),
varAnnot = varAnnot,
graphType = 'Scatter3D',
colorBy = 'Species')
"---
title: htmlwidget output
---
```{r, echo=FALSE}
widget
```
" %>% cat(file = tmp_rmd)
render(tmp_rmd, word_document())
显然,您可以永久存储out.Rmd
文件以简化代码。