@@ -8,27 +8,43 @@ output: html_document
88``` {r, message = FALSE, warning = FALSE}
99library(plotly)
1010library(htmlwidgets)
11- plot_ly(x = 1:10, y = rnorm(10), marker = list(color = rep("black", 10))) %>%
12- as.widget() %>%
11+
12+ set.seed(1056)
13+
14+ nPatients <- 100
15+ nVisits <- 10
16+
17+ df <- data.frame(
18+ fev1_perc = rnorm(n = nPatients * nVisits, mean = 100, sd = 10),
19+ uin = rep(seq(nPatients), each = nVisits),
20+ visit = rep(seq(nVisits), nPatients)
21+ )
22+ c1 <- list(color = toRGB("steelblue", 0.5))
23+ c2 <- list(color = toRGB("orange", 0.5))
24+ # `color=factor(uin)`` is here just to ensure we get one trace
25+ # for each value of uin
26+ p <- plot_ly(
27+ df, x = visit, y = fev1_perc, color = factor(uin),
28+ mode = "markers+lines", marker = c1, line = c2
29+ ) %>% layout(hovermode = "closest", showlegend = FALSE)
30+
31+ as.widget(p) %>%
1332 onRender('
14- function(el, x) {
15- var graphDiv = document.getElementById(el.id);
16- // color this point red on hover
17- el.on("plotly_hover", function(data) {
18- var trace = data.points[0].curveNumber;
19- var pt = data.points[0].pointNumber;
20- var marker = x.data[trace].marker;
21- marker.color[pt] = "red";
22- Plotly.restyle(graphDiv, marker, trace)
23- })
24- // color this point black on unhover
25- el.on("plotly_unhover", function(data) {
26- var trace = data.points[0].curveNumber;
27- var pt = data.points[0].pointNumber;
28- var marker = x.data[trace].marker;
29- marker.color[pt] = "black";
30- Plotly.restyle(graphDiv, marker, trace)
31- })
32- }
33- ')
33+ function(el, x) {
34+ var graphDiv = document.getElementById(el.id);
35+ // reduce the opacity of every trace except for the hover one
36+ el.on("plotly_hover", function(e) {
37+ var traces = [];
38+ for (var i = 0; i < x.data.length; i++) {
39+ if (i !== e.points[0].curveNumber) traces.push(i);
40+ }
41+ Plotly.restyle(graphDiv, "opacity", 0.2, traces);
42+ })
43+ el.on("plotly_unhover", function(e) {
44+ var traces = [];
45+ for (var i = 0; i < x.data.length; i++) traces.push(i);
46+ Plotly.restyle(graphDiv, "opacity", 1, traces);
47+ })
48+ }
49+ ')
3450```
0 commit comments