2017-08-19 3 views
0

Wie werden die Originaldaten für das Plotten aus den even_data-Informationen abgerufen?Zuordnung der Ereignisdateninformationen zu den Plotinformationen in Shiny-reaktiven Plots

library(plotly) 
library(shiny) 

ui <- fluidPage(
    plotlyOutput("plot"), 
    verbatimTextOutput("click") 
) 

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

    output$plot <- renderPlotly({ 
    key <- row.names(mtcars) 
    p <- ggplot(mtcars, aes(x = mpg, y = wt, colour = factor(vs), key = key)) + 
     geom_point() 
    ggplotly(p) %>% layout(dragmode = "select") 

    }) 


    output$click <- renderPrint({ 
    d <- event_data("plotly_click") 
    if (is.null(d)) "Click events appear here (double-click to clear)" else d 
    }) 


} 

shinyApp(ui, server) 

Wenn auf einem Punkt angeklickt wird, würde das Beispiel Ausgabe ähnlich sein

curveNumber pointNumber x y  key 
1   1   3 24.4 3.19 Merc 240D 

Gibt es eine Möglichkeit möglich mtcars diese Informationen auf den ursprünglichen Datensatzes abzubilden? Wie würden die Informationen in curveNumber, pointNumber nützlich sein und was bedeuten diese Felder?

Antwort

1

Die curveNumber ist die colour = factor(vs) Variable, die pointNumber ist die Zeilennummer +1 innerhalb der Gruppe (0 oder 1 von vs).

diese beiden So verwenden Sie können wie folgt vorgehen:

output$click <- renderPrint({ 
    d <- event_data("plotly_click") 
    if (is.null(d)) "Click events appear here (double-click to clear)" 
    else mtcars[rownames(mtcars) == d$key,] 
    }) 

Der komplette App:

library(plotly) 
library(shiny) 
library(dplyr) 
ui <- fluidPage(
    plotlyOutput("plot"), 
    verbatimTextOutput("click") 
) 
server <- function(input, output, session) { 
    output$plot <- renderPlotly({ 
    key <- row.names(mtcars) 
    p <- ggplot(mtcars, aes(x = mpg, y = wt, colour = factor(vs), key = key)) + 
     geom_point() 
    ggplotly(p) %>% layout(dragmode = "select") 
    }) 
    output$click <- renderPrint({ 
    d <- event_data("plotly_click") 
    if (is.null(d)) "Click events appear here (double-click to clear)" else mtcars %>% tibble::rownames_to_column() %>% filter(vs==d$curveNumber) %>% filter(row_number()==d$pointNumber+1) 

    }) 
} 
shinyApp(ui, server) 

Oder zweite Option, können Sie die key von event_data und Teilmenge mtcars wie diese extrahieren müssen :

library(plotly) 
library(shiny) 
ui <- fluidPage(
    plotlyOutput("plot"), 
    verbatimTextOutput("click") 
) 
server <- function(input, output, session) { 
    output$plot <- renderPlotly({ 
    key <- row.names(mtcars) 
    p <- ggplot(mtcars, aes(x = mpg, y = wt, colour = factor(vs), key = key)) + 
     geom_point() 
    ggplotly(p) %>% layout(dragmode = "select") 
    }) 
    output$click <- renderPrint({ 
    d <- event_data("plotly_click") 
    if (is.null(d)) "Click events appear here (double-click to clear)" else mtcars[rownames(mtcars) == d$key,] 
    }) 
} 
shinyApp(ui, server) 
+0

Danke! Aber, meine Frage war hauptsächlich darauf ausgerichtet, es mit 'curveNumber',' pointNumber' zu bekommen. – Prradep

+0

Die Antwort darauf ist in Bearbeitung. –

+1

Auch pls stellen Sie sicher, fragen Sie explizit, was Sie wollen, das ist Ihre Frage war: "Gibt es eine Möglichkeit, diese Informationen zu den ursprünglichen Datensatz mtcars zuordnen", die bereits durch die erste Übermittlung erfüllt war (ich benutzte den Schlüssel). Die zweite Vorlage mit curveNumber und pointNumber. –