是否可以在闪亮的应用程序中初始化ggplot中的画笔?

时间:2016-03-25 08:27:52

标签: r ggplot2 shiny

我有一个shiny个应用,我想要一个ggplot一个brush,所以每次应用启动时用户都不需要选择某个感兴趣的区域。当然后来用户可以选择不同的区域。以下是一个示例:

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 个答案:

答案 0 :(得分:0)

是的,有可能。

在下面的代码中,我添加了几行。首先,我添加了[0,1],以便图形可以重现。其次,有set.seed(42)被注释掉了。这有助于识别我想要的初始画笔。最后,控制dput(brush)的{​​{1}}环境中我添加了observe ranges设置以使用默认if,这是else来自brush对象的值。

NULL

初始起始页面如下所示:

enter image description here