我试图弄清楚如何使用downloadButton保存具有光泽的图。包中的示例演示了downloadButton / downloadHandler保存.csv的方法。我将基于此举一个可复制的示例。对于 ui.RshinyUI(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.Rlibrary(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可以用于编写图表的技巧都将受到赞赏。
3 回答
慕慕森
TA贡献1856条经验 获得超17个赞
我没有设法使其与一起使用ggsave,但是通过标准调用png()它似乎还可以。
我只更改了文件的output$downloadPlot一部分server.R:
output$downloadPlot <- downloadHandler(
filename = function() { paste(input$dataset, '.png', sep='') },
content = function(file) {
png(file)
print(plotInput())
dev.off()
})
请注意,我在使用0.3版本的Shiny时遇到了一些问题,但是它可以与Github的最新版本一起使用:
library(devtools)
install_github("shiny","rstudio")
- 3 回答
- 0 关注
- 559 浏览
添加回答
举报
0/150
提交
取消