R语言 将ggplot从Shiny保存到我选择的文件夹中,并使用我选择的名称

ktca8awb  于 2023-03-20  发布在  其他
关注(0)|答案(2)|浏览(140)

我有一个R Shiny文档,其中用户定义了他们为“PlotOutput”区域中显示的ggplot图选择的数据和参数、颜色等。
我想添加一个按钮,该按钮将当前在绘图区域中的图像以PNG格式保存到我已经定义的文件夹中,并使用我选择的命名格式。
也就是说,我希望文件的名称类似于“IMG_YYMMDD_HHMMSS”,其中日期和时间信息来自Sys.time()调用。
我看到的文档中唯一类似的是downloadButton小部件,但我无法让它工作,即使我可以,它也允许用户定义输出图像文件的名称和目的地,这不是我想要的。
如果我可以把ggplot对象传递给ggsave函数,就像编写代码生成这样的图像一样,那么文件名和文件路径就可以用这种方式定义,有什么方法可以做到这一点吗?
干杯
EDIT:看起来有一种方法可以使用下载处理程序来保存我选择的默认名称。出于我的目的,它看起来很容易从下面的例子中更改:

output$downloadData <- downloadHandler(
  filename = function() { 
    paste(input$downloadData, " ",Sys.Date(),".csv",sep="") 
  },
  content = function(file) {
    write.csv(myout()$dataframe1,file,row.names=F)
  }
)

但我仍然不清楚如何使用它,是否有一种方法可以将我选择的文件夹设置为默认文件夹。如果可以的话,那就太好了。

  • 我不希望这样做的原因是它应该非常快。它应该花10秒来产生用户想要的图像。如果他们需要花15秒用随机的名字将图像保存到某个随机的目的地,那么这就失去了意义。我的想法是它应该只是姓氏的字母顺序,日期和时间适用于此。
velaa5lx

velaa5lx1#

使用下面的应用程序,用户在单击按钮后选择一个文件夹,图形将以您在应用程序中指定的名称保存在该文件夹中。它使用了良好的旧包rChoiceDialogs。您也可以使用shinyFiles包。

library(shiny)
library(rChoiceDialogs)
library(ggplot2)

ui <- fluidPage(
  br(), br(),
  actionButton("save", "Save plot"),
  br(),
  plotOutput("ggplot")
)

server <- function(input, output, session) {
  
  gg <- reactive({
    ggplot(iris) + geom_point(aes(Sepal.Length, Sepal.Width))
  })
  
  output[["ggplot"]] <- renderPlot(gg())
  
  observeEvent(input[["save"]], {
    folder <- jchoose.dir()
    if(length(folder) != 0) { # if not cancelled
      path <- file.path(folder, "TheNameYouWant.png")
      ggsave(path, plot = gg())
    }
  })
  
}

shinyApp(ui, server)

chhkpiq4

chhkpiq42#

我不能做我想做的每件事,但这个答案足以让我足够接近。
技巧是将ggplot对象创建为React式数据集
1.传递给中的渲染器

output$dotPlot <- renderPlot({
    p()
})

以及2.在中传递到下载处理程序

output$save <- downloadHandler(
  filename =  function() {
    "WhatIWantToCallMyFile.png"
  },
  # content is a function with argument file. content writes the plot to the device
  content = function(file) {
    ggsave(file, p())
  } 
)

Saving ggplot from Shiny gives blank png file
这保存了一个很好的高分辨率图像,因为它是默认的,但是你可以在ggsave中修改宽度和高度。

相关问题