Скачать графики в формате PNG - PullRequest
0 голосов
/ 23 мая 2018

Я довольно новичок в Shiny Apps и хочу скачать графики в формате png / pdf.После публикации приложения в Интернете загруженное имя файла является правильным, но это пустой файл.Я применил функцию печати в контенте для downloadHandler, но, похоже, он не работает.Может кто-нибудь мне помочь?Спасибо

ui.r

library(shiny)

ui <- fluidPage(

  titlePanel("My First Shiny Project"),

    sidebarLayout(

      sidebarPanel(

       selectInput("select","Choose a Dataset",
              choices = list("trees","pressure"),
              selected = "pressure"),

       selectInput("format","Choose file format",
              choices = list("pdf","png"))

      ),

      mainPanel(

       plotOutput("graph")

      )

     ),

    downloadButton("download","Download Here")

)

server.r

library(shiny)

server <- function(input,output){

   data <- function()({
        switch(input$select,
        "trees" = trees,
        "pressure" = pressure)

    })

   output$graph <- renderPlot(
        plot(data())
    )

   output$download <- downloadHandler(

        filename = function(){

          paste("data",input$select,input$format,sep = ".")

        },

        content = function(file){
          if(input$format == "png")
            png(file)
          if(input$format == "pdf")
            pdf(file)
          print(plot(data()))
          dev.off

  }

)

}

1 Ответ

0 голосов
/ 23 мая 2018

Кажется, единственная проблема заключалась в том, что вы использовали dev.off вместо dev.off(), вам также не нужен оператор print().Рабочая версия вашего кода показана ниже, надеюсь, это поможет!

library(shiny)
library(ggplot2movies)
library(dplyr)    

ui <- fluidPage(

  titlePanel("My First Shiny Project"),
  sidebarLayout(
    sidebarPanel(

      selectInput("select","Choose a Dataset",
                  choices = list("trees","pressure"),
                  selected = "pressure"),
      selectInput("format","Choose file format",
                  choices = list("pdf","png"))
    ),
    mainPanel(
      plotOutput("graph")
    )
  ),
  downloadButton("download","Download Here")
)

server <- function(input,output){

  data <- function()({
    switch(input$select,
           "trees" = trees,
           "pressure" = pressure)
  })

  output$graph <- renderPlot(
    plot(data())
  )

  output$download <- downloadHandler(
    filename = function(){
      paste("data",input$select,input$format,sep = ".")
    },
    content = function(file){
      if(input$format == "png")
        png(file)
      if(input$format == "pdf")
        pdf(file)
      plot(data())
      dev.off()
    }
  )
}

shinyApp(ui,server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...