Наложить график xy geom_point на полигон, определенный пользовательскими щелчками в блестящем - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь получить оверлей из некоторых точек, представленных ggplot, в блестящем приложении с полигоном, основанным на кликах пользователей. Таким образом, пользователь может выбрать подгруппы из данных xy для дальнейшего анализа.

при интерактивном нажатии на точки xy я получаю сообщение об ошибке: «data» должен быть фреймом данных или другим объектом, который можно принудительно вызвать с помощью «fortify ()», а не объектом S3 с значениями классаactive.

Мне кажется, проблема в том, что я неправильно адресую значения из "gate1".

Я повторил эту проблему в небольшом примере из набора данных mtcars (см. Ниже).

Буду признателен за любую помощь, спасибо Алекс

library(ggplot2)
library(shiny)

ui <- fluidPage(# Some custom CSS for a smaller font for preformatted text
tags$head(tags$style(
HTML("
     pre, table.table {
     font-size: smaller;
     }
     ")
)),

fluidRow(column(width = 4, wellPanel(
radioButtons("plot_type", "Plot type",
             c("base", "ggplot2"))
 )),
 column(
 width = 4,
 # In a plotOutput, passing values for click, dblclick, hover, or brush
 # will enable those interactions.
 plotOutput(
           "plot1",
            height = 350,
            # Equivalent to: click = clickOpts(id = "plot_click")
            click = "plot_click",
            dblclick = dblclickOpts(id = "plot_dblclick"),
            hover = hoverOpts(id = "plot_hover"),
            brush = brushOpts(id = "plot_brush")
            )
  )))


server <- function(input, output) {
gate1 <- reactiveValues(x = NULL, y = NULL)

observeEvent(input$plot_click, {
 # Initially will be empty
 if (is.null(input$plot_click)) {
    return()
    }
gate1$x <- c(gate1$x, input$plot_click$x)
gate1$y <- c(gate1$y, input$plot_click$y)
})


output$plot1 <- renderPlot({
gplot <- ggplot(mtcars, aes(wt, mpg)) + geom_point()
if (length(gate1$x > 3))
{
  gate <- isolate(gate1)
  gplot <-
    gplot + geom_polygon(data = gate, aes(fill = "green"))
}
return(gplot)
})

}

shinyApp(ui, server)`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...