1

当我创建一组链接箱线图(在一个箱线图中选择点突出显示所有箱线图中的对应点)时,箱线图会不断更新自身不确定的次数(有时只有一次,但有时最多 20 次)。

请运行以下示例代码。

我相信问题的根源是 geom_jitter()。有没有办法阻止箱线图自我更新?谢谢。

library(shiny)
library(ggplot2)

server <- function(input, session, output) {

  X = data.frame(x1 = rnorm(1000),
                 x2 = rnorm(1000),
                 week = sample(LETTERS[1:10],1000,replace = TRUE)
                 )

  D = reactive({
    brushedPoints(X,input$brush_1, allRows = TRUE)
  })

  output$p1 = renderPlot({
    set.seed(123)
    ggplot(D(),aes(x=week,y=x1))+
      geom_boxplot() +
      geom_jitter(aes(color=selected_))+
      scale_color_manual(values = c("black","red"),guide=FALSE)


  })

  output$p2 = renderPlot({
    set.seed(123)
    ggplot(D(),aes(x=week,y=x2))+
      geom_boxplot() +
      geom_jitter(aes(color=selected_))+
      scale_color_manual(values = c("black","red"),guide=FALSE)

  })

}

ui <- fluidPage(
  splitLayout(
    plotOutput("p1",brush = "brush_1"),
    plotOutput("p2",brush = "brush_1")
  )
)

shinyApp(ui = ui, server = server)

更新:2016-9-16

我尝试用 替换geom_jittergeom_point但图表仍在不断更新。

所以geom_jitter可能不是嫌疑人。

那么地球上问题的根源是什么?

4

2 回答 2

1

猜测原因是当您刷其中一个图时源表总是不断更新。导致您所有的地块都使用相同的刷子 ID,无法识别哪个 input$brush_1 是真正的“刷子”动作。一个图表已经被刷了,input$brush_1 改变了,反应表 D 也将被更新。另一个基于新反应表的绘图再次绘图并使 input$brush_1 再次更改...

从上面的思考,根据你的代码,做了一个新的来区分输入刷动作和不同的情节。箱线图在不确定的时间内不断更新自己的问题似乎得到了解决。请尝试以下代码:

于 2016-09-18T14:23:55.507 回答
1
library(shiny)
library(ggplot2)

server <- function(input, session, output) {

  X = data.frame(x1 = rnorm(1000),
                 x2 = rnorm(1000),
                 week = sample(LETTERS[1:10],1000,replace = TRUE)
  )

  vals <- reactiveValues(
    keeprows = rep(TRUE,nrow(X))

  )

  D = reactive({
    R=cbind(X,vals$keeprows)
    #print(sum(R[,"vals$keeprows"]==TRUE))
    R
    })

  output$p1 = renderPlot({
    set.seed(123)
      ggplot(D(),aes(x=week,y=x1))+
      geom_boxplot() +
      geom_jitter(aes(colour=vals$keeprows))+
      scale_color_manual(values = c("black","red"),guide=FALSE)


  })

  output$p2 = renderPlot({
    set.seed(123)

    ggplot(D(),aes(x=week,y=x2))+
    geom_boxplot() +
    geom_jitter(aes(color=vals$keeprows))+
    scale_color_manual(values = c("black","red"),guide=FALSE)

  })

  observeEvent(input$brush_1,{
    Res=brushedPoints(X,input$brush_1,allRows = TRUE)
    vals$keeprows = Res$selected_

  })

  observeEvent(input$brush_2,{
    Res=brushedPoints(X,input$brush_2,allRows = TRUE)
    vals$keeprows = Res$selected_

  })

  observeEvent(input$exclude_reset,{
    vals$keeprows = rep(TRUE,nrow(X))

  })

}

ui <- fluidPage(
  actionButton("exclude_reset","Reset"),
  splitLayout(
    plotOutput("p1",brush = brushOpts("brush_1",resetOnNew = TRUE)),
    plotOutput("p2",brush = brushOpts("brush_2",resetOnNew = TRUE))
  )
)

shinyApp(ui = ui, server = server)
于 2016-09-18T14:32:02.723 回答