如何将 dygraphs 作为来自闪亮反应对象的参数调用到 rmakdown 中?

问题描述 投票:0回答:1

我有一个简单的闪亮应用程序,其中显示两个图,一个是 ggplot,另一个是 dygraphs。我还有一个按钮可以将绘图生成为 html 输出。 ggplot 在 html 输出中完美呈现,但 dygraphs 没有呈现,而是显示帮助 dygraphs 生成的数据。

如何在 html 输出中生成 dygraph?

请考虑以下代码,一个是app.R,另一个是report.Rmd

app.R

library(shiny)
library(ggplot2)
library(dygraphs)

report_path <- file.path(tempdir(), "report.Rmd")
file.copy("report.Rmd", report_path, overwrite = TRUE)

render_report <- function(input, output, params) {
  rmarkdown::render(input,
                    output_file = output,
                    params = params,
                    envir = new.env(parent = globalenv())
  )
}

ui <- fluidPage(
  downloadButton("report", "Generate report"),
  plotOutput("plot")
)

server <- function(input, output) {
  
  plot_gg <- reactive({
    ggplot(data = iris, aes(x=Sepal.Length, y=Petal.Length))+geom_point()
  })
  
  output$plot <- renderPlot({
    plot_gg()
  })
  
  plot_dy <- reactive({
    dygraph(nhtemp, main = "New Haven Temperatures", ylab = "Temp (F)") 
  })
  
  output$report <- downloadHandler(
    filename = "report.html",
    content = function(file) {
      params <- list(
        gg_plot = plot_gg(),
        dy_plot = plot_dy()
      )
      callr::r(
        render_report,
        list(input = report_path, output = file, params = params)
      )
    }
  )
}

shinyApp(ui, server)

报告。Rmd

---
title: "Dynamic report"
output: html_document
params:
  gg_plot: NA
  dy_plot: NA
---

{r}
params$gg_plot


{r}
params$dy_plot

而不是 html 输出中的 dygraph,它显示如下所示的内容

r shiny r-markdown r-dygraphs
1个回答
0
投票

您还应该渲染

dygraph
,仅将其放入
reactive
中是不够的。有内置功能
renderDygraph
可以使用。

plot_dy <- reactive({
  dygraph(nhtemp, main = "New Haven Temperatures", ylab = "Temp (F)") 
})
  
output$plotDy <- renderDygraph({
  plot_dy()
})

还将情节包含在

UI
中:

dygraphOutput("plotDy")

完整代码示例:

library(shiny)
library(plotly)

report_path <- file.path(tempdir(), "report.Rmd")
file.copy("report.Rmd", report_path, overwrite = TRUE)

writeLines(con = "report.Rmd", text = "---
title: 'Dynamic report'
output: html_document
params:
  gg_plot: NA
  dy_plot: NA
---

```{r plotlyout, echo=FALSE, message=FALSE, out.width='100%'}
params$gg_plot
params$dy_plot
```")

ui <- fluidPage(
  downloadButton("report", "Generate report"),
  plotOutput("plot"),
  dygraphOutput("plotDy")
)

server <- function(input, output) {
  
  plot_gg <- reactive({
    ggplot(data = iris, aes(x=Sepal.Length, y=Petal.Length))+geom_point()
  })
  
  output$plot <- renderPlot({
    plot_gg()
  })
  
  plot_dy <- reactive({
    dygraph(nhtemp, main = "New Haven Temperatures", ylab = "Temp (F)") 
  })
  
  output$plotDy <- renderDygraph({
    plot_dy()
  })
  
  output$report <- downloadHandler(
    filename = "report.html",
    content = function(file) {
      params <- list(
        gg_plot = plot_gg(),
        dy_plot = plot_dy()
      )
      callr::r(
        render_report,
        list(input = report_path, output = file, params = params)
      )
    }
  )
}

shinyApp(ui, server)
© www.soinside.com 2019 - 2024. All rights reserved.