我正在使用情节包来显示闪亮的情节。在我的本地机器上,情节渲染完美,但是当我在闪亮的服务器上运行闪亮的应用程序时,我收到错误“错误:无法打开文件'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)
答案 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()
清除当前打开的所有设备,并且一次只能使用一个。