Skip to content

Commit 6c965a8

Browse files
committed
Better onRender hover example
1 parent d136b69 commit 6c965a8

File tree

1 file changed

+38
-22
lines changed

1 file changed

+38
-22
lines changed

inst/examples/onRenderHover/index.Rmd

Lines changed: 38 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,27 +8,43 @@ output: html_document
88
```{r, message = FALSE, warning = FALSE}
99
library(plotly)
1010
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) %>%
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

Comments
 (0)