2017-09-26 5 views
-1

Je me demandais si je pouvais obtenir des données de lignes en utilisant nearPoints() à partir d'un graphique interactif avec une entrée de curseur. Mon fichier app.R ressemble:Ships nearPoints() avec entrée de curseur

library('shiny') 
library('ggplot2') 

dt <-read.csv('file.csv') 
ui <- fluidPage(
     plotOutput("plot1", height = 550, click = "plot1_click"), 
    fluidRow(
     column(3, 
     sliderInput("Obs", "Number of Books", min = 1, max = nrow(up), value = 50) 
     ), 
     column(3, offset = 3, 
       h4("Legends"), 
     verbatimTextOutput("selected") 
     ) 
    ) 
    ) 
server <- function(input, output) { 
    mydata <- reactive({ 
    dt[1:as.numeric(input$Obs),] 
    }) 
    output$plot1 <- renderPlot({ 
    test <- mydata() 
    ggplot(data = test, aes(x = test[,2], y = test[,1])) + geom_point() 
    }) 
    output$selected <- renderPrint({ 
    file <- mydata() 
    nearPoints(file, input$plot1_click, threshold = 10, maxpoints = 1, 
       addDist = FALSE) 
    }) 
} 
shinyApp(ui = ui, server = server) 

Brillant nearPoints() fonctionne parfaitement sans cette entrée de curseur. Lorsque j'ai utilisé l'entrée de curseur, je ne peux pas obtenir les données de ligne jusqu'à max. Y a-t-il une approche pour travailler avec l'entrée curseur? Toute aide est appréciée.

+0

Avez-vous essayé avec renderUI? – amrrs

+0

Juste pour vérifier que je comprends, vous voulez que la valeur de 'input $ plot1_click' soit utilisée dans votre' sliderInput'? Si c'est ce que vous voulez, vous devrez déplacer votre fonction 'sliderInput' dans une fonction de sortie' renderUI' à l'intérieur de votre 'server.R'. Vous pouvez ensuite le rendre dans 'ui.R' avec' uiOutput'. Voici la [documentation pertinente] (https://shiny.rstudio.com/reference/shiny/latest/renderUI.html) –

+0

L'entrée du curseur est "Obs", et elle contrôle le nombre de lignes à transmettre à la fonction. "input $ plot1_click" est le point où la souris a cliqué. –

Répondre

0

Le code suivant fonctionne pour moi. Il semble que nearPoints ne soit pas capable de dire quelles colonnes de votre ensemble de données sont affichées en raison de l'instruction aes(x = test[,2], y = test[,1]). Une autre solution possible serait de définir les paramètres xvar et yvar dans nearPoints.

library('shiny') 
library('ggplot2') 

dt <-mtcars 
ui <- fluidPage(
    plotOutput("plot1", height = 550, click = "plot1_click"), 
    fluidRow(
    column(3, 
      sliderInput("Obs", "Number of Cars", min = 1, max = nrow(dt), value = 50) 
    ), 
    column(3, offset = 3, 
      h4("Legends"), 
      verbatimTextOutput("selected") 
    ) 
) 
) 
server <- function(input, output) { 
    mydata <- reactive({ 
    dt[1:as.numeric(input$Obs),] 
    }) 
    output$plot1 <- renderPlot({ 
    test <- mydata() 
    ggplot(data = test, aes(mpg, wt)) + geom_point() 
    }) 
    output$selected <- renderPrint({ 
    file <- mydata() 
    nearPoints(file, input$plot1_click, threshold = 100, maxpoints = 1, 
       addDist = FALSE) 
    }) 
} 
shinyApp(ui = ui, server = server) 

Note rapide: S'il vous plaît essayer de faire le code dans votre question reproductible en utilisant l'un des ensembles de données par défaut dans R. Vous pouvez obtenir une liste de tous les ensembles de données disponibles en appelant data().