我想下载Shiny App内的报告,其中包括Plotly
图。 到目前为止,我还没有在stackoverflow上找到任何答案。 直到现在,我可以下载Plotly
的屏幕截图,但它的只出现在我的工作目录,它不会发送到Rmarkdown
。Plotly嵌入Shiny和RMarkdown
示例代码:
library(shiny)
library(plotly)
library(rsvg)
library(ggplot2)
d <- data.frame(X1=rnorm(50,mean=50,sd=10),X2=rnorm(50,mean=5,sd=1.5),Y=rnorm(50,mean=200,sd=25))
ui <-fluidPage(
title = 'Download report',
sidebarLayout(
sidebarPanel(
helpText(),
radioButtons('format', 'Document format', c('PDF', 'HTML', 'Word'),
inline = TRUE),
downloadButton('downloadReport'),
tags$script('
document.getElementById("downloadReport").onclick = function() {
var plotly_svg = Plotly.Snapshot.toSVG(
document.querySelectorAll(".plotly")[0]
);
Shiny.onInputChange("plotly_svg", plotly_svg);
};
')
),
mainPanel(
plotlyOutput('regPlot')
)
)
)
server <- function(input, output, session) {
output$regPlot <- renderPlotly({
p <- plot_ly(d, x = d$X1, y = d$X2,mode = "markers")
p
})
observeEvent(input$plotly_svg, priority = 10, {
png_gadget <- tempfile(fileext = ".png")
png_gadget <- "out.png"
print(png_gadget)
rsvg_png(charToRaw(input$plotly_svg), png_gadget)
})
output$downloadReport <- downloadHandler(
filename = function() {
paste('my-report', sep = '.', switch(
input$format, PDF = 'pdf', HTML = 'html', Word = 'docx'
))
},
content = function(file) {
src <- normalizePath('testreport.Rmd')
owd <- setwd(tempdir())
on.exit(setwd(owd))
file.copy(src, 'testreport.Rmd')
library(rmarkdown)
out <- render('testreport.Rmd', params = list(region = "Test"), switch(
input$format,
PDF = pdf_document(), HTML = html_document(), Word = word_document()
))
file.rename(out, file)
}
)
}
shinyApp(ui = ui, server = server)
和testreport.Rmd文件:
---
title: "test"
output: pdf_document
params:
name: "Test"
region: 'NULL'
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
任何帮助,将不胜感激,因为没有很多资源和文档约R Plotly
。
干杯
你想在剧情里面阴谋吗?或者你想下载一些东西进入Rmd?我很困惑,“直到现在我能够下载Plotly的屏幕截图,但它只出现在我的工作目录中,并且它不会被发送到Rmarkdown” – Llopis
我想从报告文件里闪亮的应用程序进行剧情截图(rmarkdown ) –
我不知道如何积极工作,但一旦你有图像为什么你不能使用这个[解决方案](http://stackoverflow.com/a/25167279/2886003)?或者通过截图来表示用于生成此类图像的代码?在后面的例子中,你是否厌倦将代码包含在一个块中? – Llopis