Unexpected attribute mapping with missing values in x/y
还没有人认领这个 Issue。
- 主要语言
- R
- 星标
- 2.7k
- 派生
- 641
- PR 合并指标
- 30 天内没有已合并 PR
描述
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
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先使用 plotly.R 运行所提供的 R 复现代码,比较使用 y 和 yy 的情况,以及较低层级和较高层级的 opacity 映射。跟踪缺失的 y 值和分组 trace 如何影响属性向量,然后验证 opacity 仍与相应的观测值和组保持对齐。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- r
- 领域
- data-visualization
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100