更改 withProgress() 生成的消息框的样式和位置

Change style and position of the message box generated by withProgress()

withProgress() 函数可以生成一个消息框,指示闪亮的应用程序是 运行。但是消息在浏览器的右上角,文字很小,这使得消息不那么醒目。

所以我想知道有什么办法可以改变这个框的样式和位置,从而使消息更具表现力。

这是我的部分代码:

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 = ''
              )
      }
   })

更新

这是一个更新版本所以你可以参考这个例子,这个例子来自here

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)

原版Post

这也与你之前的问题有关。所以您可能想要更改进度条的 css 样式。如果您想要更漂亮的 css 进度条,请随意尝试并做更多研究。

注意: 在计算过程中,我还禁用了该按钮,这样用户就不会多次单击该按钮,从而迫使计算自行重复。您可以进一步查看 shinyjs 以获取更多信息。正如您在下图中看到的那样,在计算过程中该按钮被禁用。一旦完成就会备份

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)

尝试修改 CSS 样式 shiny-notification。您可以查看 this post.

简单方法: 您可以只在 ui 中包含 HTML 函数 tags$head() 来覆盖进度条。因为它是一个通知,所以可以用 .shiny-notification 调用它。最简单的方法是将此行放在 ui 中的某个位置并调整位置(以及其他 CSS 相关参数,see here

ui <- fluidPage(
  titlePanel(),

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

  sidebarPanel()
  mainPanel()
         )