Можно ли считать точки из графика ggplot stat_qq с помощью NearPoints? - PullRequest
0 голосов
/ 01 февраля 2019

Я создаю блестящее приложение и пытаюсь определить точки нажатия на графике stat_qq с помощью NearPoints.Я изо всех сил пытаюсь заставить этот код работать, я всегда получаю сообщение об ошибке: nearPoints: not able to automatically infer xvar from coordinfo.

Я пытался указать xvar и yvar внутри функции nearPoints, однако дляВ qq-plot мне нужно указать только одну переменную.Какой из них я укажу, другой выдает ошибку.

library(shiny)
library(ggplot2)

ui <- fluidPage(
  mainPanel(
    plotOutput("qqplot", click = "qqplot_click"),
    verbatimTextOutput("excl")
  ) 
)

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

  rdata <- data.frame(rnorm(200, 20, 2), rep(TRUE, 200))
  names(rdata) <- c("data","Select")

  output$qqplot <- renderPlot({ggplot(data=rdata, aes(sample=data)) + stat_qq() + stat_qq_line()

  })


  excl.data <- eventReactive(input$qqplot_click, {
    res <- nearPoints(rdata, input$qqplot_click, yvar='data', allRows = TRUE)
    xor(rdata$Select, res$selected_)
  })

  output$excl <- renderPrint(excl.data())

}

shinyApp(ui, server)

Кто-нибудь знает, что мне не хватает?

1 Ответ

0 голосов
/ 01 февраля 2019

Вы должны использовать ggplot_build для получения визуализированных данных.

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

  rdata <- data.frame(rnorm(200, 20, 2), rep(TRUE, 200))
  names(rdata) <- c("data","Select")

  gg <- ggplot(data=rdata, aes(sample=data)) + stat_qq() + stat_qq_line()
  ggdata <- ggplot_build(gg)$data[[1]]

  output$qqplot <- renderPlot({
    gg
  })

  observe({
    print(input$qqplot_click)
  })  

  excl.data <- eventReactive(input$qqplot_click, {
    res <- nearPoints(ggdata, input$qqplot_click, 
                      xvar="theoretical", yvar="sample", allRows = TRUE)
    xor(rdata$Select, res$selected_)
  })

  output$excl <- renderPrint(excl.data())

}
...