software libreria graphs graficos ejemplos r shiny plotly

libreria - ¿Hay alguna manera de mostrar las tramas a medida que se construyen en Shiny en lugar de esperar a todas?



plotly software (1)

Puede usar reactiveTimer() para actualizar su página regularmente.

Y puede guardar sus parcelas en una list de parcelas para imprimirlas inmediatamente en cada actualización.

Tuve que reordenar las funciones renderPlot para que el iterador de step solo renderice un gráfico a la vez

También elegí no comenzar el primer render de inmediato para trazar parcelas de "Carga".

library(shiny) ui <- fluidPage( title = "Page loading test" , h1("Page loading test") , plotOutput("plot1") , plotOutput("plot2") , plotOutput("plot3") , plotOutput("plot4") ) # Loading plot plot(-1:1, -1:1, type = "n", xlab = "", ylab = "") text(0,0, "Loading",cex = 5) loading <- recordPlot() plotlist <- vector("list",4) step <- 0 # which plot should be rendered next server <- function(input, output, session) { autoInvalidate <- reactiveTimer(10, session) output$plot4 <- renderPlot({autoInvalidate(); if(step>4){plotlist[[4]]} else if(step==4){step <<- step+1 print("rendering step 4") Sys.sleep(10) plotlist[[4]] <<- {plot(rnorm(50));recordPlot()}} else loading }) output$plot3 <- renderPlot({autoInvalidate(); if(step>3){plotlist[[3]]} else if(step==3){step <<- step+1 print("rendering step 3") Sys.sleep(10) plotlist[[3]] <<- {plot(rnorm(50));recordPlot()}} else loading }) output$plot2 <- renderPlot({autoInvalidate(); if(step>2){plotlist[[2]]} else if(step==2){step <<- step+1 print("rendering step 2") Sys.sleep(10) plotlist[[2]] <<- {plot(rnorm(50));recordPlot()}} else loading }) output$plot1 <- renderPlot({autoInvalidate(); if(step>1){plotlist[[1]]} else if(step==1){step <<- step+1 print("rendering step 1") Sys.sleep(10) plotlist[[1]] <<- {plot(rnorm(50));recordPlot()}} else {step <<-1;loading} }) } shinyApp(ui = ui, server = server)

Tengo un Shiny Dashboard con muchas tramas, todas las cuales tardan varios segundos en construirse. Una vez que construye el último, todos se muestran. En su lugar, me gustaría que cada gráfico se muestre tan pronto como se complete. Entiendo que R tiene un único subproceso, pero parece que debe haber una forma de "devolver la ejecución al código de visualización" o algo así.

Este código demuestra el problema:

library(shiny) ui <- fluidPage( title = "Page loading test" , h1("Page loading test") , plotOutput("plot1") , plotOutput("plot2") , plotOutput("plot3") , plotOutput("plot4") ) server <- function(input, output) { output$plot1 <- renderPlot({ Sys.sleep(10) plot(rnorm(50)) }) output$plot2 <- renderPlot({ Sys.sleep(10) plot(rnorm(50)) }) output$plot3 <- renderPlot({ Sys.sleep(10) plot(rnorm(50)) }) output$plot4 <- renderPlot({ Sys.sleep(10) plot(rnorm(50)) }) } shinyApp(ui = ui, server = server)

Los sueños son simplemente para emular la ejecución lenta.

Se necesitan 40 segundos para que se muestre la página. Me gustaría que la página tome 10s para mostrar plot1, luego 10s adicionales para mostrar plot2, etc. ¿Hay una llamada como UpdatePage () que se pueda llamar al final de cada función de trazado?

En mi página, tengo cargando animaciones en ejecución para que el usuario sepa que la actividad está ocurriendo, lo que lo hace aún más obvio cuando se cargan a la vez.

Podría, por supuesto, tener una página más simple, pero no sería un tablero. :)