plotly / plotly/plotly.R

Passing `selectedpoints` as an argument to a plot doesn't update the stored selected data.

Aperta
#2,238 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
R
Stelle
2.7k
Fork
641
Metriche di merge delle PR
Nessuna PR unita negli ultimi 30g

Descrizione

Bug

This problem is also described here:
https://github.com/plotly/dash/issues/2301

This is true when constructing the graph with a selectedpoints argument or when restyling the graph with a selectedpoints argument.

I have been digging into the source code to try to figure out a workaround to this, but my limited knowledge of JavaScript is obscuring the solution.

Reproducible Example

Please see this reproducible example below:

library(shiny)


#' Render the mtcars graphs, wt x-axis, mpg y-axis
render_graph <- function() {
  plotly::plot_ly(
    mtcars,
    x = ~ wt,
    y = ~ mpg,
    selected = list(marker = list(color = "red")),
    hoverinfo = "text",
    text = rownames(mtcars),
    type = "scatter",
    mode = "markers",
    source = "graph"
  ) %>%
    plotly::layout(dragmode = "select",
                   clickmode = "event+select")
}


ui <- fluidPage(fluidRow(
  actionButton("action", "Print Selected"),
  plotly::plotlyOutput("graph"),
  DT::DTOutput("table")
))


server <- function(input, output, session) {
  output$table <- DT::renderDT({
    mtcars
  })
  
  output$graph <- plotly::renderPlotly(render_graph())
  
  plot_proxy <- plotly::plotlyProxy("graph")
  table_proxy <- DT::dataTableProxy("table")
  
  observeEvent(input$action, {
    selected <-
      isolate(plotly::event_data("plotly_selected", source = "graph"))
    print(selected)
  })
  
  selected_data <- reactive({
    selected <-
      plotly::event_data("plotly_selected", source = "graph")
    selected <- selected$pointNumber + 1
    
    selected
  })

  observe({
    table_proxy %>% DT::selectRows(selected_data())
  })

  # update the plot based on table
  observeEvent(input$table_cell_clicked, {
    selected_rows <- input$table_rows_selected - 1
    selected_rows <- t(matrix(selected_rows))

    plotly::plotlyProxyInvoke(
      plotly::plotlyProxy("graph", session),
      "restyle",
      list(selectedpoints = selected_rows), # arg needs a row-major matrix
      0  # this number represents the plot trace. No arg updates all traces
    )
  })
}


shinyApp(ui, server)

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia eseguendo l’esempio Shiny riproducibile e segui le chiamate a plotly::event_data e plotly::plotlyProxyInvoke, in particolare l’operazione restyle con selectedpoints. Esamina l’integrazione JavaScript utilizzata da plotly.R, poiché il report identifica una conoscenza limitata di JavaScript come un ostacolo. Il lavoro è completato quando i selectedpoints forniti durante la costruzione del grafico o il restyling vengono riflessi nei dati selezionati memorizzati.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
javascript, r
Ambito
data-visualization
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
38/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.