Plotly绘图不能在闪亮的服务器上呈现

时间:2016-04-21 18:14:33

标签: shiny plotly shiny-server

我正在使用情节包来显示闪亮的情节。在我的本地机器上,情节渲染完美,但是当我在闪亮的服务器上运行闪亮的应用程序时,我收到错误“错误:无法打开文件'Rplots.pdf'”,其中应该渲染绘图。我已经尝试使用dev.off()命令,因为我已经阅读了一些其他可能的解决方案,并将其作为一种可能的解决方案。下面我粘贴了我在server.R脚本中创建图表的代码:

    output$recSalesPlot <- renderPlotly({
       BWplot_rec <- ggplot(d1, aes_string(x = "End_of_Week", y = input$metric_rec))
            BWplot_rec <- BWplot_rec + geom_line(aes(color = Group), size = .25)
            BWplot_rec <- BWplot_rec + geom_point(aes(color = Group), size = 2)
            BWplot_rec <- BWplot_rec + xlab("Week")
            if(input$metric_rec == "NetSales"){
              BWplot_rec <- BWplot_rec + ylab("Euros")
            }
            BWplot_rec <- BWplot_rec + ggtitle(paste0("Average ", input$metric_rec, " Per Group Per Week"))
            BWplot_rec <- BWplot_rec + guides(color=FALSE)
            BWplot_rec <- BWplot_rec + theme(panel.grid.major.y = element_blank(),
                                             panel.grid.minor.y = element_blank())
            p <- ggplotly(BWplot_rec)
            p
          })
}

在ui.R脚本中,我使用以下命令调用绘图:

plotlyOutput("recSalesPlot", width = "100%", height = 600)

3 个答案:

答案 0 :(得分:10)

我不能说我理解问题的根源或为什么我的解决方案对我有用,但我遇到了同样的问题,只是在我的脚本开头添加了pdf(NULL),一切似乎都有效正好。不需要dev.off()(为我添加错误)。

答案 1 :(得分:5)

这样的错误通常意味着您的目录不属于正在运行闪亮服务器的用户。

我建议避免使用@jenwen的答案,因为它通过不尝试编写中间文件来规避根本问题,但通常会导致用户使用量很大的Error in plot(NULL): too many open devices

更好的解决方案是遵循闪亮服务器的惯例:将应用程序放入闪亮的服务器目录时,例如: /srv/shiny-server/app-name,我将权限更改为已配置为运行shiny-server的用户:

sudo chown -R shiny:shiny /srv/shiny-server/app-name

这样,用户可以毫无问题地编写和删除该应用程序中的临时目录。

答案 2 :(得分:2)

jenwen 答案通常是正确的,但是: 请注意,您应在pdf(NULL)内添加renderPlotly(),而不是在脚本开头。 而且,如果您再次使用renderPlotly()拨打pdf(NULL),则会创建一个&#34;太多的开放设备&#34;错误将导致服务器上的所有图形设备被杀死,包括png,tiff等,而不仅仅是pdf。 要解决此问题 - 在pdf(NULL)之前,您可以致电graphics.off()清除当前打开的所有设备,并且一次只能使用一个。