Is it possible to initialize brush in ggplot in a shiny app?

Viewed 694

I have a shiny app and I want a ggplot with a brush at the start, so the user does not need to select certain area of interest every time the app starts. Later of course user can select different area. Here is an example to start with:

library(shiny)
library(ggplot2)

runApp(shinyApp(
  ui = fluidPage(plotOutput('plotA', brush = brushOpts(id = 'plotA_brush')),
                 plotOutput('plotZ')),
  server = function(input, output, session) {
    pollData <- reactivePoll(60 * 1000, session,
                             checkFunc = function(){ Sys.time() },
                             valueFunc = function(){ data.frame(x = 1:100, y = cumsum(rnorm(100)))})
    output$plotA <- renderPlot({
      dt <- pollData()
      ggplot(dt, aes(x, y)) + geom_line()
    })
    ranges <- reactiveValues(x = NULL, y = NULL)
    observe({
      brush <- input$plotA_brush
      if(!is.null(brush)) {
        ranges$x <- c(brush$xmin, brush$xmax)
        ranges$y <- c(brush$ymin, brush$ymax)
      } else {
        ranges$x <- NULL
        ranges$y <- NULL
      }
    })
    output$plotZ <- renderPlot({
      dt <- pollData()
      ggplot(dt, aes(x, y)) + geom_line() + coord_cartesian(xlim = ranges$x, ylim = ranges$y)
    })
  }
))
1 Answers
Related