highcharter: Highlight points in a group
Asked Answered
C

1

6

When using highcharter for interactive plots, how can I specify that datapoints in a group must highlight together?

library(highcharter)
library(dplyr)
library(tidyr)

dfr <- data.frame(sample=c("A","B","C","D"),part=c(2,3,4,6),cat=c(5,7,3,3))
dfr1 <- dfr %>% tidyr::gather(key=metric,value=value,-sample)
dfr1
#>   sample metric value
#> 1      A   part     2
#> 2      B   part     3
#> 3      C   part     4
#> 4      D   part     6
#> 5      A    cat     5
#> 6      B    cat     7
#> 7      C    cat     3
#> 8      D    cat     3

dfr1 %>%
  hchart(.,"scatter",hcaes(x=metric,y=value,group=factor(sample))) %>%
  hc_xAxis(type="category",title=list(text="Metrics"),crosshair=TRUE) %>%
  hc_yAxis(type="linear",title=list(text="Counts"),crosshair=TRUE) %>%
  hc_chart(zoomType="xy",inverted=T) %>%
  hc_tooltip(useHTML=TRUE,formatter = JS("function(){
                                         return('<b>Sample: </b>'+this.point.sample+'</br>')
                                         }"))

plot

In this example, when I hover over the blue point (Sample A), I would like all other blue points (Sample A's) to be highlighted as well.

Created on 2022-03-11 by the reprex package (v2.0.1)

Session info
sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────
#>  setting  value
#>  version  R version 4.1.0 (2021-05-18)
#>  os       Ubuntu 20.04.4 LTS
#>  system   x86_64, linux-gnu
#>  ui       X11
#>  language en_GB:en
#>  collate  en_GB.UTF-8
#>  ctype    en_GB.UTF-8
#>  tz       Europe/Stockholm
#>  date     2022-03-11
#>  pandoc   2.14.0.3 @ /usr/lib/rstudio/bin/pandoc/ (via rmarkdown)
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────
#>  package     * version date (UTC) lib source
#>  assertthat    0.2.1   2019-03-21 [1] CRAN (R 4.1.0)
#>  backports     1.4.1   2021-12-13 [1] CRAN (R 4.1.0)
#>  broom         0.7.11  2022-01-03 [1] CRAN (R 4.1.0)
#>  callr         3.7.0   2021-04-20 [1] CRAN (R 4.1.0)
#>  cli           3.1.0   2021-10-27 [1] CRAN (R 4.1.0)
#>  crayon        1.4.2   2021-10-29 [1] CRAN (R 4.1.0)
#>  curl          4.3.2   2021-06-23 [1] CRAN (R 4.1.0)
#>  data.table    1.14.2  2021-09-27 [1] CRAN (R 4.1.0)
#>  DBI           1.1.2   2021-12-20 [1] CRAN (R 4.1.0)
#>  digest        0.6.29  2021-12-01 [1] CRAN (R 4.1.0)
#>  dplyr       * 1.0.7   2021-06-18 [1] CRAN (R 4.1.0)
#>  ellipsis      0.3.2   2021-04-29 [1] CRAN (R 4.1.0)
#>  evaluate      0.14    2019-05-28 [1] CRAN (R 4.1.0)
#>  fansi         1.0.2   2022-01-14 [1] CRAN (R 4.1.0)
#>  fastmap       1.1.0   2021-01-25 [1] CRAN (R 4.1.0)
#>  fs            1.5.2   2021-12-08 [1] CRAN (R 4.1.0)
#>  generics      0.1.1   2021-10-25 [1] CRAN (R 4.1.0)
#>  glue          1.6.0   2021-12-17 [1] CRAN (R 4.1.0)
#>  highcharter * 0.9.4   2022-01-03 [1] CRAN (R 4.1.0)
#>  highr         0.9     2021-04-16 [1] CRAN (R 4.1.0)
#>  htmltools     0.5.2   2021-08-25 [1] CRAN (R 4.1.0)
#>  htmlwidgets   1.5.4   2021-09-08 [1] CRAN (R 4.1.0)
#>  httr          1.4.2   2020-07-20 [1] CRAN (R 4.1.0)
#>  igraph        1.2.11  2022-01-04 [1] CRAN (R 4.1.0)
#>  jsonlite      1.7.3   2022-01-17 [1] CRAN (R 4.1.0)
#>  knitr         1.37    2021-12-16 [1] CRAN (R 4.1.0)
#>  lattice       0.20-45 2021-09-22 [1] CRAN (R 4.1.0)
#>  lifecycle     1.0.1   2021-09-24 [1] CRAN (R 4.1.0)
#>  lubridate     1.8.0   2021-10-07 [1] CRAN (R 4.1.0)
#>  magrittr      2.0.1   2020-11-17 [1] CRAN (R 4.1.0)
#>  mime          0.12    2021-09-28 [1] CRAN (R 4.1.0)
#>  pillar        1.6.4   2021-10-18 [1] CRAN (R 4.1.0)
#>  pkgconfig     2.0.3   2019-09-22 [1] CRAN (R 4.1.0)
#>  processx      3.5.2   2021-04-30 [1] CRAN (R 4.1.0)
#>  ps            1.6.0   2021-02-28 [1] CRAN (R 4.1.0)
#>  purrr         0.3.4   2020-04-17 [1] CRAN (R 4.1.0)
#>  quantmod      0.4.18  2020-12-09 [1] CRAN (R 4.1.0)
#>  R.cache       0.15.0  2021-04-30 [1] CRAN (R 4.1.0)
#>  R.methodsS3   1.8.1   2020-08-26 [1] CRAN (R 4.1.0)
#>  R.oo          1.24.0  2020-08-26 [1] CRAN (R 4.1.0)
#>  R.utils       2.11.0  2021-09-26 [1] CRAN (R 4.1.0)
#>  R6            2.5.1   2021-08-19 [1] CRAN (R 4.1.0)
#>  reprex        2.0.1   2021-08-05 [1] CRAN (R 4.1.0)
#>  rlang         0.4.12  2021-10-18 [1] CRAN (R 4.1.0)
#>  rlist         0.4.6.2 2021-09-03 [1] CRAN (R 4.1.0)
#>  rmarkdown     2.11    2021-09-14 [1] CRAN (R 4.1.0)
#>  rstudioapi    0.13    2020-11-12 [1] CRAN (R 4.1.0)
#>  sessioninfo   1.2.2   2021-12-06 [1] CRAN (R 4.1.0)
#>  stringi       1.7.6   2021-11-29 [1] CRAN (R 4.1.0)
#>  stringr       1.4.0   2019-02-10 [1] CRAN (R 4.1.0)
#>  styler        1.6.2   2021-09-23 [1] CRAN (R 4.1.0)
#>  tibble        3.1.6   2021-11-07 [1] CRAN (R 4.1.0)
#>  tidyr       * 1.1.4   2021-09-27 [1] CRAN (R 4.1.0)
#>  tidyselect    1.1.1   2021-04-30 [1] CRAN (R 4.1.0)
#>  TTR           0.24.3  2021-12-12 [1] CRAN (R 4.1.0)
#>  utf8          1.2.2   2021-07-24 [1] CRAN (R 4.1.0)
#>  vctrs         0.3.8   2021-04-29 [1] CRAN (R 4.1.0)
#>  webshot       0.5.2   2019-11-22 [1] CRAN (R 4.1.0)
#>  withr         2.4.3   2021-11-30 [1] CRAN (R 4.1.0)
#>  xfun          0.29    2021-12-14 [1] CRAN (R 4.1.0)
#>  xml2          1.3.3   2021-11-30 [1] CRAN (R 4.1.0)
#>  xts           0.12.1  2020-09-09 [1] CRAN (R 4.1.0)
#>  yaml          2.2.1   2020-02-01 [1] CRAN (R 4.1.0)
#>  zoo           1.8-9   2021-03-09 [1] CRAN (R 4.1.0)
#> 
#>  [1] /home/user/miniconda3/envs/r-4.1/lib/R/library
#> 
#> ──────────────────────────────────────────────────────────────────────────────
Christian answered 15/1, 2018 at 12:42 Comment(1)
did you ever figure this out?Longcloth
H
0

I know much time has passed, but in case there is further interest in this...

There is another solution that suggests a formatter for a shared tooltip. I think that can be adapted here.

When a point within a group is hovered over, then all points in the same group are highlighted.

library(highcharter)
library(tidyverse)

dfr <- data.frame(sample=c("A","B","C","D"),part=c(2,3,4,6),cat=c(5,7,3,3))
dfr1 <- dfr %>% pivot_longer(cols = -sample, names_to = "metric")
dfr1

dfr1 %>%
  hchart(.,"scatter",hcaes(x=metric,y=value,group=factor(sample))) %>%
  hc_xAxis(type="category",title=list(text="Metrics"),crosshair=TRUE) %>%
  hc_yAxis(type="linear",title=list(text="Counts"),crosshair=TRUE) %>%
  hc_chart(zoomType="xy",inverted=T) %>%
  hc_tooltip(useHTML=TRUE,formatter = JS(
    "function(args){
      var this_point_index = this.series.data.indexOf(this.point);
      var this_series_index = this.series.index;
      var that_series_index = this.series.index == 0 ? 1 : 0;
      var that_series = args.chart.series[that_series_index];
      var that_point = that_series.data[this_point_index];
      return ('<b>Sample: </b>'+this.point.sample+'</br>');
    }"
  ))

Sessioninfo:

R version 4.1.3 (2022-03-10)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Monterey 12.2.1

Matrix products: default
LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

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

other attached packages:
 [1] forcats_0.5.1     stringr_1.4.0     dplyr_1.0.7       purrr_0.3.4      
 [5] readr_2.1.0       tidyr_1.1.4       tibble_3.1.4      ggplot2_3.3.5    
 [9] tidyverse_1.3.1   highcharter_0.9.4

loaded via a namespace (and not attached):
 [1] httr_1.4.2         jsonlite_1.8.0     viridisLite_0.4.0 
 [4] modelr_0.1.8       shiny_1.7.1        assertthat_0.2.1  
 [7] TTR_0.24.2         cellranger_1.1.0   yaml_2.2.1        
[10] pillar_1.6.2       backports_1.2.1    lattice_0.20-45   
[13] glue_1.6.0         rlist_0.4.6.1      digest_0.6.29     
[16] RColorBrewer_1.1-2 promises_1.2.0.1   rvest_1.0.1       
[19] colorspace_2.0-2   htmltools_0.5.2    httpuv_1.6.4      
[22] plyr_1.8.6         pkgconfig_2.0.3    broom_0.7.9       
[25] haven_2.4.3        xtable_1.8-4       scales_1.1.1      
[28] openxlsx_4.2.4     later_1.3.0        tzdb_0.1.2        
[31] generics_0.1.0     ellipsis_0.3.2     withr_2.4.3       
[34] lazyeval_0.2.2     cli_3.0.1          quantmod_0.4.18   
[37] magrittr_2.0.2     crayon_1.4.2       readxl_1.3.1      
[40] mime_0.12          evaluate_0.14      GGally_2.1.2      
[43] fs_1.5.2           fansi_0.5.0        xml2_1.3.2        
[46] xts_0.12.1         tools_4.1.3        data.table_1.14.2 
[49] hms_1.1.0          lifecycle_1.0.1    plotly_4.9.4.1    
[52] reprex_2.0.1       munsell_0.5.0      zip_2.2.0         
[55] formattable_0.2.1  compiler_4.1.3     rlang_0.4.12      
[58] grid_4.1.3         rstudioapi_0.13    htmlwidgets_1.5.4 
[61] igraph_1.2.6       rmarkdown_2.10     gtable_0.3.0      
[64] DBI_1.1.2          reshape_0.8.8      curl_4.3.2        
[67] R6_2.5.1           zoo_1.8-9          lubridate_1.7.10  
[70] knitr_1.34         fastmap_1.1.0      utf8_1.2.2        
[73] stringi_1.7.4      Rcpp_1.0.8         vctrs_0.3.8       
[76] dbplyr_2.1.1       tidyselect_1.1.1   xfun_0.26  

Plot

plotly with hover tooltip

Haematogenesis answered 11/3, 2022 at 2:34 Comment(5)
Hmm.. It doesn't seem to work for me. Perhaps, you could update with a reprex?Christian
@rmf Added reprex and sessioninfo - I need to get to meeting but will check back later...hoping this will work!Haematogenesis
Thanks! It still doesn't work for me. Tried Rstudio browser, firefox and chrome. Perhaps, you could add a screenshot? If others upvote this (ie; it works for others), I am happy to mark this as an answer. I also noticed that I have a newer version of highcharter. Not sure if that even matters.Christian
Strange - not sure what else the differences might be. I did upgrade highcharter to 0.9.4 and R to 4.1.3. Restarted R with clean session. I added a small animated gif to the answer above. I'm curious to see if others have the same problem. In the meantime I'll keep looking around for other possibilities. It's a great question, and would like to see alternative options.Haematogenesis
Ah yes! It does work. I was only paying attention to the popup label.Christian

© 2022 - 2024 — McMap. All rights reserved.