猿问

保存在闪亮的应用程序中绘制的图

我试图弄清楚如何使用downloadButton保存具有光泽的图。包中的示例演示了downloadButton / downloadHandler保存.csv的方法。我将基于此举一个可复制的示例。


对于 ui.R


shinyUI(pageWithSidebar(

  headerPanel('Downloading Data'),

  sidebarPanel(

selectInput("dataset", "Choose a dataset:", 

            choices = c("rock", "pressure", "cars")),

    downloadButton('downloadData', 'Download Data'),

    downloadButton('downloadPlot', 'Download Plot')

  ),

  mainPanel(

    plotOutput('plot')

  )

))

对于 server.R


library(ggplot2)

shinyServer(function(input, output) {

  datasetInput <- reactive({

    switch(input$dataset,

           "rock" = rock,

           "pressure" = pressure,

           "cars" = cars)

  })


  plotInput <- reactive({

    df <- datasetInput()

    p <-ggplot(df, aes_string(x=names(df)[1], y=names(df)[2])) +

      geom_point()

  })


  output$plot <- renderPlot({

    print(plotInput())

  })


  output$downloadData <- downloadHandler(

    filename = function() { paste(input$dataset, '.csv', sep='') },

    content = function(file) {

      write.csv(datatasetInput(), file)

    }

  )

  output$downloadPlot <- downloadHandler(

    filename = function() { paste(input$dataset, '.png', sep='') },

    content = function(file) {

      ggsave(file,plotInput())

    }

  )

})

如果您正在回答此问题,则可能对此很熟悉,但是要使其正常工作,请将以上内容保存到单独的脚本中(ui.R以及工作目录中server.R的文件夹(foo)中)。要运行闪亮的应用程序,请运行runApp("foo")。


使用ggsave,我收到一条错误消息,指示ggsave无法使用该filename功能(我认为)。如果我使用标准的图形设备(如下所示),则Download Plot可以正常工作,但不会写入图形。


任何使downloadHandler可以用于编写图表的技巧都将受到赞赏。


慕丝7291255
浏览 560回答 3
3回答

慕慕森

我没有设法使其与一起使用ggsave,但是通过标准调用png()它似乎还可以。我只更改了文件的output$downloadPlot一部分server.R:&nbsp;output$downloadPlot <- downloadHandler(&nbsp; &nbsp; filename = function() { paste(input$dataset, '.png', sep='') },&nbsp; &nbsp; content = function(file) {&nbsp; &nbsp; &nbsp; png(file)&nbsp; &nbsp; &nbsp; print(plotInput())&nbsp; &nbsp; &nbsp; dev.off()&nbsp; &nbsp; })请注意,我在使用0.3版本的Shiny时遇到了一些问题,但是它可以与Github的最新版本一起使用:library(devtools)install_github("shiny","rstudio")
随时随地看视频慕课网APP
我要回答