plotly / plotly/plotly.R

Unexpected attribute mapping with missing values in x/y

Aperta
#1,815 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

Dear devs,

it seems like NA values in x/y values (i.e. mapped to coordinates) cause issues (or unexpected behavior) with mapping of other attributes, in this case opacity. I assume this is in-line with #1126.
The attribute seems to be recycled across groups, or only mapped to a single group, depending on how the argument was supplied (referenced as higher and lower level mapping in code).
I was able to reproduce the problem with the code below. Note, that the attribute vector is generated as a column of the data.frame used for plotting.

Cheers!

library(plotly)

n <- 100

# generate test data set with grouping factor z for color
# and index (used for customdata in event_data())
# in shiny
testdat <- data.frame(x = seq_len(n),
                      y = rnorm(n),
                      yy = rnorm(n),
                      z = gl(5, 20),
                      .index = seq_len(n))

# generate attribute vector for opacity
# based on .index (active selection in shiny)
testdat$.opacity <- ifelse(testdat$.index %in% 5:14, 0.9, 0.1)

# assign missing values
testdat$yy[15:19] <- NA

# mapping vector
colvector <- c('1' = "black",
               '2' = "red",
               '3' = "darkorange",
               '4' = "steelblue",
               '5' = "seagreen4")

# "lower level" mapping ---------------------------------------------------

# works as expected
plot_ly(data = testdat) %>% 
    add_markers(type = "scatter",
                x = ~x,
                y = ~y,
                color = ~as.factor(z),
                colors = colvector,
                customdata = ~.index,
                marker = list(opacity = ~.opacity))

# when missing values are present on y-value
# seems to recycle attributes after first group
plot_ly(data = testdat) %>% 
    add_markers(type = "scatter",
                x = ~x,
                y = ~yy,
                color = ~as.factor(z),
                colors = colvector,
                customdata = ~.index,
                marker = list(opacity = ~.opacity))



# "higher level" mapping --------------------------------------------------



# when attribute is mapped at "higher level"
# first "z group" is given opacity attribute,
# but not others
plot_ly(data = testdat) %>% 
    add_markers(type = "scatter",
                x = ~x,
                y = ~y,
                color = ~as.factor(z),
                colors = colvector,
                customdata = ~.index,
                opacity =  ~.opacity)

# when attribute is mapped at "higher level"
# and missing values present,
# opacity not mapped at all
plot_ly(data = testdat) %>% 
    add_markers(type = "scatter",
                x = ~x,
                y = ~yy,
                color = ~as.factor(z),
                colors = colvector,
                customdata = ~.index,
                opacity = ~.opacity)


Session Info:

> sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 18363)

Matrix products: default

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] plotly_4.9.2       ggplot2_3.3.0.9000

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.4.6      pillar_1.4.4      compiler_3.6.3    later_1.0.0       tools_3.6.3       digest_0.6.25     jsonlite_1.6.1   
 [8] lifecycle_0.2.0   tibble_3.0.1      gtable_0.3.0      viridisLite_0.3.0 pkgconfig_2.0.3   rlang_0.4.6       shiny_1.4.0      
[15] rstudioapi_0.11   crosstalk_1.0.0   yaml_2.2.1        fastmap_1.0.1     withr_2.2.0       dplyr_0.8.5       httr_1.4.1       
[22] vctrs_0.2.4       htmlwidgets_1.5.1 grid_3.6.3        tidyselect_1.0.0  glue_1.4.0        data.table_1.12.8 R6_2.4.1         
[29] farver_2.0.3      purrr_0.3.4       tidyr_1.0.2       magrittr_1.5      scales_1.1.0      promises_1.1.0    ellipsis_0.3.0   
[36] htmltools_0.4.0   assertthat_0.2.1  xtable_1.8-4      mime_0.9          colorspace_1.4-1  httpuv_1.5.2      lazyeval_0.2.2   
[43] munsell_0.5.0     crayon_1.3.4     

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 la riproduzione R fornita con plotly.R, confrontando i casi che usano y e yy e le mappature dell’opacità di livello inferiore e superiore. Traccia il modo in cui i valori y mancanti e le tracce raggruppate influenzano i vettori degli attributi, quindi verifica che l’opacità rimanga allineata alle osservazioni e ai gruppi corrispondenti.

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

Valutazione

Stack tecnologico
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
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.