如何防止每次UI交互多次重绘闪亮的绘图?

时间:2017-08-08 14:27:40

标签: r ggplot2 shiny

在我的闪亮应用程序中,我有一个日期范围输入和一组复选框。复选框选项基于输入$ dateRange确定。我遇到了每次更改日期范围时重绘两次绘图的问题。第一次重绘时,它将使用新的日期范围,但旧的复选框选项。然后更新复选框选项并再次重绘图。

有没有办法阻止多次重绘图,只有在所有其他UI元素都更新后才绘制它?

server.R code snippet

  # Check boxes for variants in run
  output$choose_variants <- renderUI({
    # Get the variants associated with the run
    dat <- loadVariants(input$dateRange[1], input$dateRange[2])
    if(is.null(dat))
      return()

    # Create the checkboxes and select them all by default
    checkboxGroupInput("variants", "Variants",
                        choices  = dat$variant,
                        selected = dat$variant)
  })

  # Output the data
  output$plot1 <- renderPlot({
    runLocations <- loadRunsBetweenDates(input$dateRange[1], input$dateRange[2], input$variants)
    #ggplot()
  })

ui.R代码段

  sidebarPanel(
    dateRangeInput('dateRange',
      label = 'Date range',
      start = Sys.Date(), end = Sys.Date()
    ),
    uiOutput("choose_variants")
  ),

1 个答案:

答案 0 :(得分:3)

由于input$variants总是在日期范围滑块发生变化时发生变化,因此您可以仅根据input$variants创建情节。

  # Output the data
  output$plot1 <- renderPlot({

    # outside of isolate statement, so this plot becomes dependent on its value.
    input$variants

    # put this in an isolate block, so it doesn´t trigger an invalidation.
    isolate(runLocations <- loadRunsBetweenDates(input$dateRange[1], input$dateRange[2], input$variants))
    #ggplot()
  })

希望这有帮助!

  

编辑:替代方案,基于评论中的条件

您可以创建一个被动反应,并使您的情节仅依赖于以下内容:

  loadedVariants <- reactive({
  loadVariants(input$dateRange[1], input$dateRange[2])
  })

 # Output the data
  output$plot1 <- renderPlot({

    # outside of isolate statement, so this plot becomes dependent on its value.
    loadedVariants()

    # put this in an isolate block, so it doesn´t trigger an invalidation.
    isolate(runLocations <- loadRunsBetweenDates(input$dateRange[1], input$dateRange[2], input$variants))
    #ggplot()
  })
相关问题