【问题标题】:Using a download handler to save ggplot images in shiny使用下载处理程序以闪亮的方式保存 ggplot 图像
【发布时间】:2018-10-03 07:34:10
【问题描述】:

我正在使用 Shiny 开发应用程序。在 Shiny 中,我正在使用操作按钮渲染一个简单的绘图。我已经包含一个下载按钮来下载现在在 UI 中的图。来自我的代码(plot3)

我尝试了以下代码来保存图像,但出现错误

plotInput 未找到。

谁能建议我哪里出错了。

以下是我的代码供参考。 用户界面:

ui <- tabItem(tabName = "models2",
        fluidPage(
          fluidRow(
            infoBoxOutput("overview")
          ),
          fluidRow(
            actionButton("result1","Generate Result"),
            downloadButton('downloadPlot','Download Plot'),
            plotOutput("plot3")
          )
        ))

服务器

server <- function(input,output,session{
 output$overview <- renderValueBox({
      valueBox(
        paste("91"),"Overview",icon=icon("hourglass"),
        color="green"
      )
    })
  observeEvent(input$result1,{
  output$plot3  <- renderPlot({
    ggplot(data=timedata, aes(x=dat1, y=yes, group=3))+ 
      geom_point(shape=1)+
      coord_cartesian(xlim=c(dat1_xlowlim,dat1_xhighlim))+
      labs(title="Probability",x="Date",y="True probability")  
  })
  })
  output$downloadPlot <- downloadHandler(
    filename = function(){paste(input$plot3,'.png',sep='')},
    content = function(plot3){
      ggsave(plot3,plotInput())

    }
  )
})

另外,要注意我的闪亮和 R 工作室是在 R 环境中。

【问题讨论】:

  • 实验室中的错字(title="Probability",x="Date",y="真实概率")
  • @A.Suliman 我现在将纠正它。虽然我得到了情节,但问题是我无法下载情节
  • 首先,服务器函数的参数后面有右括号。然后你会得到Warning: Error in plotInput: could not find function "plotInput"

标签: r ggplot2 shiny


【解决方案1】:
library(shiny)
library(shinydashboard)
ui <- tabItem(tabName = "models2",
          fluidPage(
            fluidRow(
              infoBoxOutput("overview")
            ),
            fluidRow(
              actionButton("result1","Generate Result"),
              downloadButton('downloadPlot','Download Plot'),
              plotOutput("plot3")
            )
          ))

server <- function(input,output,session){
           output$overview <- renderValueBox({
           valueBox(
            paste("91"),"Overview",icon=icon("hourglass"),
           color="green"
      )
  })
    data <- reactiveValues()
    observeEvent(input$result1,{
    data$plot <- ggplot(data=iris, aes(x=Sepal.Length, y=Sepal.Width))+ 
    geom_point(shape=1)})

    output$plot3  <- renderPlot({  data$plot })

    output$downloadPlot <- downloadHandler(
         filename = function(){paste("input$plot3",'.png',sep='')},
         content = function(file){
          ggsave(file,plot=data$plot)
    }
  )
}
shinyApp(ui, server)

【讨论】:

  • @Suliman,我可以下载图像。但是应用程序会自动关闭。我希望它运行。
  • 很抱歉,您所说的应用程序会自动关闭。我在 Rstudio 和网络浏览器中运行该应用程序,下载后没有任何异常发生。
【解决方案2】:

@Mikz 我没有足够的声誉来关注您的评论。因此,我创建了一个新的 anwser,但希望回答您的问题“为什么应用程序会自动关闭?”。

我在公司的 rstudio-server 上开发闪亮的应用程序时遇到了同样的问题。我的应用程序会在一段时间后自行关闭。但是,在我的本地笔记本电脑上运行的同一个应用程序没有这个问题。

经过我的研究,我认为它是由超时设置引起的(默认为 60 秒)。我还使用函数 ~~Sys.sleep()~~ 来测试这个默认时间。我从这个blog 中找到了适合我的解决方案。

这个想法是使用 WebSocket 每 50 秒触发一次应用程序。这样,你就不需要让技术人员调整服务器级别的设置了。

【讨论】:

  • 再看看How to Answer。通过发布不是答案的内容,您可能会被否决,这会使您失去代表,这会使您进一步远离获得足够代表发表评论的目标
  • 非常感谢@camille 的提醒。我承认我的回答与上述主要问题无关。我的目的是帮助 Mikz,因为我遇到了同样的错误,但我已经用解决方案修复了它。由于提出主要问题的人也是@Mikz,我希望我的解决方案可以帮助他的后续问题。无论如何,我将来会遵守我们社区的规则,我的目的/目标是互相分享和帮助。
猜你喜欢
  • 2016-02-26
  • 2020-10-31
  • 2016-06-01
  • 2015-03-30
  • 1970-01-01
  • 2016-11-01
  • 2020-08-22
  • 2015-09-01
  • 2018-07-19
相关资源
最近更新 更多