2016-07-27 9 views
1

Ich habe ein Plotplot in R Shiny. Ich möchte viele Punkte anklicken und sie in einer Tabelle anzeigen lassen. Die Handlung funktioniert gut und ich kann 1 plotly_click (via event_data()) in einer Tabelle anzeigen lassen. Wie kann ein Vektor aus vielen event_data-Punkten wachsen? Hier ist ein Beispielcode. Ich habe versucht, das Ereignis in d_save zu speichern. Vielen Dank.Wie viele Punkte von plotly_click in R Shiny angezeigt werden?

library(shiny) 
library(plotly) 

data1 <- data.frame(cbind(seq(1,1000,1),seq(1,1000,1)*5)) 
colnames(data1) <- c('index','data') 
data_points <- data.frame(cbind(seq(1,1000,5),seq(1,1000,5)*5)) 
colnames(data_points) <- c('index','data') 


ui <- fluidPage(
    plotlyOutput("plot1"), 
    tableOutput("dataTable") 
) 

d_save <- vector() 

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

    # make plotly plot 
    output$plot1 <- renderPlotly({ 
    p <- plot_ly(data1, x = data1$index, y = data1$data,mode = "lines") 
    add_trace(p, x = data_points$index, y = data_points$data, mode = "markers") 
    }) 

    # show table of stances 
    output$dataTable <- renderTable({ 
     d <- event_data("plotly_click") 
     d_save <- c(d_save,d$pointNumber[2]+1) 
     data.frame(d_save) 
    }) 
} 

shinyApp(ui, server) 

Antwort

2

Es ist nichts ernsthaft falsch mit diesem und es war seltsam, dass es nie beantwortet wurde. Es ist kein schlechtes Beispiel für reine Handlung (ohne ggplot).

Ich reparierte sie durch:

  • zu einem d_save <<- c(...) die d_save <- c(...) Zuordnung zu ändern (ein reactiveValues hier mit wäre sauber).
  • den plotly Anruf Ändern ein Rohr zu sein, die scheinbar einige Einstellungen (wie die type=scatter default) zu übertragen erlaubt - die Warnung zu beseitigen:

Keine Spur Typ angegeben: Basierend auf Informationen geliefert, ein 'Scatter' Trace scheint angemessen.

  • fixiert ein "Aus-by-one" Indexierungsfehler in der d_save Zuordnung.
  • hinzugefügt ein layout(...), um ihm einen Titel zu geben (dies ist nützlich für viele Dinge).

Der resultierende Code:

library(shiny) 
library(plotly) 

data1 <- data.frame(cbind(seq(1,1000,1),seq(1,1000,1)*5)) 
colnames(data1) <- c('index','data') 
data_points <- data.frame(cbind(seq(1,1000,5),seq(1,1000,5)*5)) 
colnames(data_points) <- c('index','data') 

ui <- fluidPage(
    plotlyOutput("plot1"), 
    tableOutput("dataTable") 
) 

d_save <- vector() 

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

    # make plotly plot 
    output$plot1 <- renderPlotly({ 
    plot_ly(data1, x=data1$index, y=data1$data,mode = "lines") %>% 
     add_trace(x = data_points$index, y=data_points$data, mode = "markers") %>% 
     layout(title="Plotly_click Test") 
    }) 

    # show table of point markers clicked on by number 
    output$dataTable <- renderTable({ 
    d <- event_data("plotly_click") 
    d_save <<- c(d_save,d$pointNumber[1]+1) 
    data.frame(d_save) 
    }) 
} 
shinyApp(ui, server) 

Das Bild:

enter image description here

+0

Jedes Feedback für mich? –

+0

Lange überfällig aber danke. – sajawa

+0

Ich schätze es, es ist nie zu spät. Aber könnte ich dich bitten, die Antwort auch zu akzeptieren? Klicken Sie auf das kleine Häkchen unter dem Upvote/Downvote. Das bringt dir auch Punkte. –