为什么plotOutput验证失败时仍然可刷?

时间:2018-07-27 19:52:16

标签: r shiny

我正在尝试使绘图可绘制,但是在某些情况下需要显示“不可用”消息,这是我使用validate(need())所做的。但是,如果显示了该图,然后变为无效,则画笔区域仍然存在(参见图片)。 enter image description here

最小的可复制示例:

library(shiny)
ui <- fluidPage(
   checkboxInput("Validate", label="Validate?", value=T),
  plotOutput("MainPlot", brush=brushOpts("MainPlotBrush", direction='x'))
)
server <- function(input, output) {

   output$MainPlot<-renderPlot({
     validate(need(input$Validate, message="This plot failed to render"))
     hist(rnorm(100))
   })
}
shinyApp(ui = ui, server = server)

当绘图无效时,有没有办法终止笔刷功能?

1 个答案:

答案 0 :(得分:0)

Ryan Morton的建议提供了一种解决方案,该解决方案可在无效时删除画笔。您可以在renderUI而不是renderPlot中进行验证。

library(shiny)
ui <- fluidPage(
   checkboxInput("Validate", label="Validate?", value=T),
  uiOutput("MainPlotSpot")
)
server <- function(input, output) {

  output$MainPlotSpot<-renderUI({
    validate(need(input$Validate, message="This plot failed to render"))
    plotOutput('MainPlot', brush=brushOpts("MainPlotBrush", direction='x'))
  })
   output$MainPlot<-renderPlot({
     hist(rnorm(100))
   })
}
shinyApp(ui = ui, server = server)