Сначала обратите внимание на аргументы вашего сервера. Чтобы назначить reactiveValues, вы должны сделать это внутри реактивного выражения. Таким образом, чтобы захватить кисть координаты вам нужно использовать этот
observeEvent(input$plotBrush,{
if(is.null(values$brush)){
values$brush <- input$plotBrush}
})
вместо этого
brush <- reactive({
input$plotBrush
})
Второй вариант создает функцию под названием кисть, которую вы назвали бы с кистью().
Один из способов очистить график от кисти - проверить, являются ли значения $ brush нулевыми и изменить то, что вы делаете на основе этого. В этом случае, если значения $ brush не равны нулю, отображается пустой график, и новые точки не могут быть выбраны.
library(ggplot2)
library(shiny)
runApp(list(
ui = fluidPage(
plotOutput("plot",
brush = brushOpts("plotBrush",
delay = 5000,
resetOnNew = TRUE)
# resetOnNew = TRUE clears the brush
# each time a new plot is displayed.
),
p("Brushed Points:"),
verbatimTextOutput("brushedPoints")
),
server = function(input, output, session) {
values <- reactiveValues(brush = NULL)
output$plot <- renderPlot({
if(is.null(values$brush)){
ggplot(cars, aes(speed, dist)) + geom_point()
} else {
ggplot(cars, aes(speed, dist)) + geom_blank()
}
})
observeEvent(input$plotBrush,{
#Run this whenever points are brushed
if(is.null(values$brush)){
values$brush <- input$plotBrush}
})
output$brushedPoints <- renderPrint({
values$brush
})
}
))
Второй вариант также доступен, см https://stackoverflow.com/a/35066532/3229332 для объяснения
library(ggplot2)
library(shiny)
runApp(list(
ui = fluidPage(
plotOutput("plot",
brush = brushOpts("plotBrush",
delay = 5000,
resetOnNew = TRUE)
# resetOnNew = TRUE clears the brush
# each time a new plot is displayed.
),
p("Brushed Points:"),
verbatimTextOutput("brushedPoints")
),
server = function(input, output, session) {
values <- reactiveValues(brush = NULL)
output$plot <- renderPlot({
if(is.null(values$brush)){
ggplot(cars, aes(speed, dist)) + geom_point()
} else {
ggplot(cars, aes(speed, dist)) + geom_blank()
}
})
observeEvent(input$plotBrush,{
#Run this whenever points are brushed
output$plot <- renderPlot({
if(is.null(values$brush)){
ggplot(cars, aes(speed, dist)) + geom_point()
values$brush <- input$plotBrush
} else {
ggplot(cars, aes(speed, dist)) + geom_blank()
}
})
}
)
output$brushedPoints <- renderPrint({
values$brush
})
}
))
Это удивительный пакет действительно :) И хорошее решение, я в конечном итоге сделать это, как хорошо, но спасибо за положить его в письменном виде здесь, так что другие могут воспользоваться в будущем –