Shiny R recordPlot()在本地呈现,但对象不显示在Shinyapps.io

时间:2018-02-18 05:02:11

标签: r shiny

我的server.r - >

output$finaltable2 <- renderUI({
    if(is.null(input$check)) {return()}
    else
      tabsetPanel(
        tabPanel("Q Bins", renderPlot(replayPlot(qplot), height = 600)),
        tabPanel("P Value Histogram", renderPlot(replayPlot(tplot), height = 600)),
        tabPanel("Q Value to Use", h3(toString(qaverage)))
  )

})

取出replayPlot()并在renderPlot()内调用qplot / tplot对象也有效:

output$finaltable2 <- renderUI({
    if(is.null(input$check)) {return()}
    else
      tabsetPanel(
        tabPanel("Q Bins", renderPlot(qplot, height = 600)),
        tabPanel("P Value Histogram", renderPlot(tplot, height = 600)),
        tabPanel("Q Value to Use", h3(toString(qaverage)))
     )
  })

我的qplot和tplot对象由:

制作
plot.new() 
par(mfrow=c(3,4))
barplot(df[[1]][[2]])
   *etc, etc, etc [adding more subplots to plot]*
qplot <- recordPlot()

也许shinyapps linux服务器不喜欢recordPlot()结构;还有另一种方法可以记录我的绘图数据并在输出$ UI调用中呈现它吗?谢谢!

1 个答案:

答案 0 :(得分:4)

所以在阅读link provided by @ginberg之后,我想出了这个答案。希望它能帮助2038年的任何未来读者。

首先,在创建我的recordPlot()对象时,我添加了dev.control(&#34; enable&#34;)和dev.off(),如下所示:

plot.new() 
dev.control("enable")
hist(df etc etc etc)
qplot <- recordPlot()
dev.off()

然后在我的server.r文件中,在我的输出$ thing renderUI中,我更改了renderPlot以包含replayPlot()。像这样:

tabPanel("Q Bins", renderPlot(replayPlot(qplot), height = 600)),

然后我将文件上传到shinyapps - 效果很好。感谢ginberg向我展示了录制和重放图表的页面。

[我试图做的其他事情,但没有做得很远:]

  1. 将绘图保存为图像并将图像加载到图像中     tabsetPanel。
  2. 使用plotOutput()