@@ -8,27 +8,43 @@ output: html_document
8
8
``` {r, message = FALSE, warning = FALSE}
9
9
library(plotly)
10
10
library(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) %>%
13
32
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
+ ')
34
50
```
0 commit comments