La función withProgress() puede generar un cuadro de mensaje que indica que la aplicación brillante se está ejecutando. Pero el mensaje está en la esquina superior derecha del navegador con un tamaño de texto pequeño, lo que hace que el mensaje no sea tan llamativo.

Así que me pregunto si hay alguna forma de cambiar el estilo y la posición de este cuadro, para que el mensaje sea más expresivo.

Aquí está una parte de mi código:

output$plot <- renderPlot({ 
 if (input$button){

 withProgress(
              distributionPolygon(data(),unit="years",colors=c("black","gray30","gray50","gray70","blue3","dodgerblue3","steelblue1","lightskyblue1","red4","indianred3","orange","seagreen4"),main=title(),tpsMax=input$months),
              message = 'Loading...',
              detail = ''
              )
      }
   })
3
Mily 27 ene. 2016 a las 15:20

3 respuestas

La mejor respuesta

Actualizar

Esta es una versión actualizada, por lo que puede consultar este ejemplo, el ejemplo se tomó de aquí

server <- function(input, output) {
  output$plot <- renderPlot({
    input$goPlot # Re-run when button is clicked

    # Create 0-row data frame which will be used to store data
    dat <- data.frame(x = numeric(0), y = numeric(0))

    withProgress(message = 'Making plot', value = 0, {
      # Number of times we'll go through the loop
      n <- 10

      for (i in 1:n) {
        # Each time through the loop, add another row of data. This is
        # a stand-in for a long-running computation.
        dat <- rbind(dat, data.frame(x = rnorm(1), y = rnorm(1)))

        # Increment the progress bar, and update the detail text.
        incProgress(1/n, detail = paste("Doing part", i))

        # Pause for 0.1 seconds to simulate a long computation.
        Sys.sleep(0.1)
      }
    })

    plot(dat$x, dat$y)
  })
}

ui <- shinyUI(basicPage(
  plotOutput('plot', width = "300px", height = "300px"),
  actionButton('goPlot', 'Go plot')
))

shinyApp(ui = ui, server = server)

Publicación original

Esto también está relacionado con su pregunta anterior. Así que probablemente quieras cambiar el estilo css de la barra de progreso. Siéntase libre de jugar e investigar más si quiere una barra de progreso css más elegante.

Nota: durante los cálculos, también he desactivado el botón para que los usuarios no hagan clic en el botón varias veces, lo que obligó a que el cálculo se repita. Puede buscar más en shinyjs para obtener más información. Como puede ver en la imagen de abajo durante el cálculo, ese botón está desactivado. Será una copia de seguridad una vez que esté terminado

rm(list = ls())
library(shiny)
library(shinyIncubator)
library(shinyjs)

server <- function(input, output, session) {
  observe({
    if(input$aButton==0) return(NULL)
    withProgress(session, min=1, max=15, expr={
      disable("aButton")
      for(i in 1:20) {
        setProgress(message = 'Finished...',detail = paste0('Number ',i, ':20'))
        Sys.sleep(0.1)
      }
      Sys.sleep(1.5)
    })
    enable("aButton")
  })
}

ui <- fluidPage(
  tags$head(tags$style(".shiny-progress {top: 50% !important;left: 50% !important;margin-top: -100px !important;margin-left: -250px !important; color: blue;font-size: 20px;font-style: italic;}")),
  sidebarPanel(actionButton("aButton", "Let's go!"), width=2),
  useShinyjs(),
  mainPanel(progressInit())
)

shinyApp(ui = ui, server = server)

enter image description here

0
Pork Chop 22 jun. 2017 a las 09:11

Intente modificar el estilo CSS shiny-notification. Puede consultar esta publicación.

0
Cris Silva 27 sep. 2017 a las 18:06

Manera fácil: Puede incluir las etiquetas de función HTML $ head () en la interfaz de usuario para superponer la barra de progreso. Dado que es una notificación, se puede llamar con .shiny-notification. La forma más sencilla es poner esta línea en algún lugar de la interfaz de usuario y ajustar las posiciones (y otros parámetros relacionados con CSS, ver aquí.

ui <- fluidPage(
  titlePanel(),

  tags$head(tags$style(".shiny-notification {position: fixed; top: 60% ;left: 50%)),

  sidebarPanel()
  mainPanel()
         )
4
Primax1995 25 may. 2018 a las 16:23