gpt4 book ai didi

r - plotly 地嵌入到 Shiny 和 RMarkdown 中

转载 作者:行者123 更新时间:2023-12-03 01:02:42 25 4
gpt4 key购买 nike

我想在Shiny App中下载报告,其中包括Plotly图形。到目前为止我还没有在 stackoverflow 上找到任何答案。到目前为止,我可以下载 Plotly 的屏幕截图但它仅出现在我的工作目录中并且不会发送到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 的来源和文档并不多.

干杯

最佳答案

如果 out.png 下载到您的工作目录,您可以修改 downloadHandlercontent 函数,将其移动到临时目录目录并将其添加到报告中:

content = function(file) {
temp_dir <- tempdir()
tempReport <- file.path(temp_dir, 'testreport.Rmd')
tempImage <- file.path(temp_dir, 'out.png')
file.copy('testreport.Rmd', tempReport, overwrite = TRUE)
file.copy('out.png', tempImage, overwrite = TRUE)

library(rmarkdown)
out <- render(tempReport, params = list(region = "Test"), switch(
input$format,
PDF = pdf_document(), HTML = html_document(), Word = word_document()
))
file.rename(out, file)
}

您的 testreport.Rmd 可能如下所示(更多信息 here ):

---
title: "test"
---

Here's the plot image.

![Plot image](out.png)

您还可以在content 函数的render 中传递plotly 函数的参数,如所述 here并使用参数化的 Rmarkdown 文件,但这仅适用于 Html 报告。

关于r - plotly 地嵌入到 Shiny 和 RMarkdown 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40863962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com