rendertext - tags$div shiny
Plotear plot no renderizado en servidor brillante (3)
No puedo decir que entiendo la raíz del problema o por qué mi solución incluso funciona para mí, pero me encontré con el mismo problema y simplemente agregué el pdf(NULL)
al comienzo de mi script y todo parece funcionar bien. No dev.off()
necesario dev.off()
(agregarlo arrojó un error para mí).
Estoy usando el paquete plotly para mostrar una trama en brillante. En mi máquina local la trama rinde perfectamente, sin embargo, cuando ejecuto la aplicación brillante en el servidor brillante, recibo el error "Error: no se puede abrir el archivo ''Rplots.pdf''" donde se supone que se representará la trama. Intenté usar el comando dev.off () ya que había leído otras soluciones posibles que hacían referencia a esto como una posible solución. A continuación, pegué mi código para crear el gráfico en el script 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
})
}
En el script ui.R estoy usando el siguiente comando para llamar a la gráfica:
plotlyOutput("recSalesPlot", width = "100%", height = 600)
Una respuesta jenwen es en general correcta, pero: Tenga en cuenta que debe agregar pdf(NULL)
dentro de renderPlotly()
no al comienzo del script. Y también si comienzas a llamar renderPlotly()
con pdf(NULL)
más veces creará un error de "demasiados dispositivos abiertos" que matará todos tus dispositivos gráficos en el servidor incluyendo png, tiff, etc., no solo en formato pdf. Para solucionarlo, justo antes de pdf(NULL)
puede llamar a graphics.off()
para borrar todos los dispositivos actualmente abiertos y tener solo uno a la vez.
Un error como este generalmente significa que su directorio no es propiedad del usuario por el que está ejecutando el servidor brillante.
Sugiero evitar la respuesta de @ jenwen porque evita el problema raíz al no intentar escribir un archivo intermedio, pero a menudo dará como resultado un Error in plot(NULL): too many open devices
con un gran uso por parte del usuario.
Una mejor solución es cumplir con las convenciones de servidor brillante: al colocar la aplicación en el brillante directorio del servidor, por ejemplo, /srv/shiny-server/app-name
, cambio los permisos para el usuario que se ha configurado para ejecutar brillante -servidor:
sudo chown -R shiny:shiny /srv/shiny-server/app-name
De esta forma, el usuario puede escribir y eliminar directorios temporales dentro de esa aplicación sin problemas.