在绘图加载时禁用闪亮按钮

Posted

技术标签:

【中文标题】在绘图加载时禁用闪亮按钮【英文标题】:Disable button in shiny while plot is loading 【发布时间】:2017-10-11 23:56:36 【问题描述】:

是否可以在加载绘图/反应元素时禁用闪亮的按钮?我知道shinyjs 可以禁用和启用输入元素,但我不知道如何设置与加载图/反应元素的连接。该示例基于Single-file shiny apps page。我只是添加了一个按钮和孤立的部分。不基于shinyjs 的解决方案也值得赞赏:)

library(shiny)
server <- function(input, output) 
  output$distPlot <- renderPlot(
    input$button

    isolate(
      hist(rnorm(input$obs), col = 'darkgray', border = 'white')
    )
  )


ui <- fluidPage(
  shinyjs::useShinyjs(),
  sidebarLayout(
    sidebarPanel(
      sliderInput("obs", "Number of observations:", min = 10, max = 500, value = 100),
      actionButton("button", "OK!")
    ),
    mainPanel(plotOutput("distPlot"))
  )
)

shinyApp(ui = ui, server = server)

【问题讨论】:

另一种简单的方法是use req,这样它就不会在某些数据未准备好时采取行动,如果这符合您的需要。 【参考方案1】:

这样的?

library(shiny)
library(shinyjs)
server <- function(input, output) 

  PlotData <- eventReactive(input$button,
    disable("button") 
    Sys.sleep(2)
    hist(rnorm(input$obs), col = 'darkgray', border = 'white')
    enable("button") 
  )

  output$distPlot <- renderPlot(
    PlotData()
  )


ui <- fluidPage(
  shinyjs::useShinyjs(),
  sidebarLayout(
    sidebarPanel(
      sliderInput("obs", "Number of observations:", min = 10, max = 1000, value = 2000),
      actionButton("button", "OK!")
    ),
    mainPanel(plotOutput("distPlot"))
  )
)

shinyApp(ui = ui, server = server)

【讨论】:

是的,这正是我想要的!不知道情节可以成为eventReactive 的一部分。感谢您的快速响应!【参考方案2】:

通过以下方式,您不必设置时间。该按钮仅在计算期间被禁用。

library(shiny)

js <- "
$(document).ready(function() 
  $('#distPlot').on('shiny:recalculating', function() 
    $('button').prop('disabled', true);
    $('button').css('color', 'red');
  );
  $('#distPlot').on('shiny:recalculated', function() 
    $('button').prop('disabled', false);
    $('button').css('color', 'black');
);
);
"

server <- function(input, output) 

  output$distPlot <- renderPlot(
    hist(rnorm(input$obs), col = 'darkgray', border = 'white')
  )


ui <- fluidPage(
  tags$head(tags$script(html(js))),
  sidebarLayout(
    sidebarPanel(
      sliderInput("obs", "Number of observations:", min = 10000, max = 100000, value = 20000),
      actionButton("button", "OK!")
    ),
    mainPanel(plotOutput("distPlot"))
  )
)

shinyApp(ui = ui, server = server)

【讨论】:

以上是关于在绘图加载时禁用闪亮按钮的主要内容,如果未能解决你的问题,请参考以下文章

动态创建带有闪亮绘图的选项卡,而无需重新创建现有选项卡

使用 ggplot facets 时增加闪亮的绘图大小

闪亮的绘图输出中的选择性 y 变量

闪亮的双击缩放绘图交互无法正常工作

使用响应式表达式启用/禁用按钮

链接dataTableOutput和R中闪亮的绘图