更改 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()
)
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()
)