2016-11-08 5 views
2

Пожалуйста, запустите образец кода.R Shiny: странное поведение функций кисти с помощью ggplot2

Когда я выбираю точки на диаграммах рассеяния, эти выбранные точки будут удалены из диаграмм. Это в основном работает отлично, за исключением того, что, когда я выбираю некоторые точки, близкие к углам диаграмм, эти точки возвращаются после быстрого двойного самообновления.

Для точек, находящихся в средней части диаграмм, он просто отлично работает.

enter image description here

Как объяснить это странное поведение?

library(ggplot2) 
library(shiny) 

server <- function(input, output) { 

    vals = reactiveValues(keeprows = TRUE) 

    observeEvent(input$brush_1,{ 
    cat("---------------\n") 
    print("brush_1") 
    Res = brushedPoints(mtcars,brush = input$brush_1,allRows = TRUE) 
    vals$keeprows = !Res$selected_  
    }) 

    observeEvent(input$brush_2,{ 
    cat("---------------\n") 
    print("brush_2") 
    Res = brushedPoints(mtcars,brush = input$brush_2,allRows = TRUE) 
    vals$keeprows = !Res$selected_  
    }) 

    D = reactive({ 
    print("D") 
    mtcars[vals$keeprows,] 
    }) 

    output$p1 = renderPlot({ 
    print("plot_1") 
    X = D() 
    ggplot(X,aes(x=mpg,y=cyl))+geom_point() 
    }) 
    output$p2 = renderPlot({ 
    print("plot_2") 

    ggplot(D(),aes(x=mpg,y=wt))+geom_point() 
    }) 

    output$L = renderPrint({ 
    Res = brushedPoints(mtcars,brush = input$brush_1,allRows = TRUE) 
    Res 
    }) 
} 


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


shinyApp(ui = ui, server = server) 

Кажется, что brush_1 событие вызывается дважды, и сюжет сбрасывается, когда выбраны эти странные точки.

ответ

3

Проблема происходит, когда вы отмените точки в пределах участка, потому что это тот перерисовано, чтобы соответствовать всему пространству, и это сбрасывает кисть ...

вы можете установить ограничение починки на участке чтобы не допустить этого:

ggplot(X,aes(x=mpg,y=cyl))+ 
geom_point()+ 
scale_x_continuous(limits=c(min(mtcars$mpg),max(mtcars$mpg)))+ 
scale_y_continuous(limits=c(min(mtcars$cyl),max(mtcars$cyl))) 
+0

Спасибо. Идеально. – John

Смежные вопросы