Skip to content

Commit 51ef6c1

Browse files
authored
Merge pull request #6950 from plotly/simplify-splom-hover
simplify splom hover
2 parents 57d2d85 + 36d4f50 commit 51ef6c1

File tree

2 files changed

+30
-56
lines changed

2 files changed

+30
-56
lines changed

Diff for: draftlogs/6947_add.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
- Add `layout.hoversubplots` to enable hover effects across multiple cartesian suplots sharing one axis [[#6947](https://github.com/plotly/plotly.js/pull/6947)]
1+
- Add `layout.hoversubplots` to enable hover effects across multiple cartesian suplots sharing one axis [[#6947](https://github.com/plotly/plotly.js/pull/6947), [#6950](https://github.com/plotly/plotly.js/pull/6950)]

Diff for: src/traces/splom/hover.js

+29-55
Original file line numberDiff line numberDiff line change
@@ -11,55 +11,47 @@ function hoverPoints(pointData, xval, yval, hovermode, opts) {
1111
var hovermodeHasX = (hovermode || '').charAt(0) === 'x';
1212
var hovermodeHasY = (hovermode || '').charAt(0) === 'y';
1313

14-
var xpx = pointData.xa.c2p(xval);
15-
var ypx = pointData.ya.c2p(yval);
14+
var points = _hoverPoints(pointData, xval, yval);
1615

17-
var points = _hoverPoints(pointData, xpx, ypx);
16+
if((hovermodeHasX || hovermodeHasY) && opts.hoversubplots === 'axis' && points[0]) {
17+
var subplotsWith = (
18+
hovermodeHasX ?
19+
pointData.xa :
20+
pointData.ya
21+
)._subplotsWith;
1822

19-
if((hovermodeHasX || hovermodeHasY) && opts.hoversubplots === 'axis') {
20-
var _xpx = points[0]._xpx;
21-
var _ypx = points[0]._ypx;
23+
var gd = opts.gd;
2224

23-
if(
24-
(hovermodeHasX && _xpx !== undefined) ||
25-
(hovermodeHasY && _ypx !== undefined)
26-
) {
27-
var subplotsWith = (
28-
hovermodeHasX ?
29-
pointData.xa :
30-
pointData.ya
31-
)._subplotsWith;
25+
var _pointData = extendFlat({}, pointData);
3226

33-
var gd = opts.gd;
27+
for(var i = 0; i < subplotsWith.length; i++) {
28+
var spId = subplotsWith[i];
3429

35-
var _pointData = extendFlat({}, pointData);
36-
37-
for(var i = 0; i < subplotsWith.length; i++) {
38-
var spId = subplotsWith[i];
39-
40-
if(hovermodeHasY) {
41-
_pointData.xa = getFromId(gd, spId, 'x');
42-
} else { // hovermodeHasX
43-
_pointData.ya = getFromId(gd, spId, 'y');
44-
}
30+
if(hovermodeHasY) {
31+
_pointData.xa = getFromId(gd, spId, 'x');
32+
} else { // hovermodeHasX
33+
_pointData.ya = getFromId(gd, spId, 'y');
34+
}
4535

46-
var newPoints = _hoverPoints(_pointData, _xpx, _ypx, hovermodeHasX, hovermodeHasY);
36+
var axisHoversubplots = hovermodeHasX || hovermodeHasY;
37+
var newPoints = _hoverPoints(_pointData, xval, yval, axisHoversubplots);
4738

48-
points = points.concat(newPoints);
49-
}
39+
points = points.concat(newPoints);
5040
}
5141
}
5242

5343
return points;
5444
}
5545

56-
function _hoverPoints(pointData, xpx, ypx, hoversubplotsX, hoversubplotsY) {
46+
function _hoverPoints(pointData, xval, yval, axisHoversubplots) {
5747
var cd = pointData.cd;
5848
var trace = cd[0].trace;
5949
var scene = pointData.scene;
6050
var cdata = scene.matrixOptions.cdata;
6151
var xa = pointData.xa;
6252
var ya = pointData.ya;
53+
var xpx = xa.c2p(xval);
54+
var ypx = ya.c2p(yval);
6355
var maxDistance = pointData.distance;
6456

6557
var xi = helpers.getDimIndex(trace, xa);
@@ -69,36 +61,21 @@ function _hoverPoints(pointData, xpx, ypx, hoversubplotsX, hoversubplotsY) {
6961
var x = cdata[xi];
7062
var y = cdata[yi];
7163

72-
var id, dxy, _xpx, _ypx;
64+
var id, dxy;
7365
var minDist = maxDistance;
7466

7567
for(var i = 0; i < x.length; i++) {
76-
if((hoversubplotsX || hoversubplotsY) && i !== pointData.index) continue;
68+
if(axisHoversubplots && i !== pointData.index) continue;
7769

7870
var ptx = x[i];
7971
var pty = y[i];
80-
var thisXpx = xa.c2p(ptx);
81-
var thisYpx = ya.c2p(pty);
82-
83-
var dx = thisXpx - xpx;
84-
var dy = thisYpx - ypx;
85-
var dist = 0;
86-
87-
var pick = false;
88-
if(hoversubplotsX) {
89-
if(dx === 0) pick = true;
90-
} else if(hoversubplotsY) {
91-
if(dy === 0) pick = true;
92-
} else {
93-
dist = Math.sqrt(dx * dx + dy * dy);
94-
if(dist < minDist) pick = true;
95-
}
72+
var dx = xa.c2p(ptx) - xpx;
73+
var dy = ya.c2p(pty) - ypx;
74+
var dist = Math.sqrt(dx * dx + dy * dy);
9675

97-
if(pick) {
76+
if(axisHoversubplots || dist < minDist) {
9877
minDist = dxy = dist;
9978
id = i;
100-
_xpx = thisXpx;
101-
_ypx = thisYpx;
10279
}
10380
}
10481

@@ -108,10 +85,7 @@ function _hoverPoints(pointData, xpx, ypx, hoversubplotsX, hoversubplotsY) {
10885

10986
if(id === undefined) return [pointData];
11087

111-
var out = calcHover(pointData, x, y, trace);
112-
out._xpx = _xpx;
113-
out._ypx = _ypx;
114-
return [out];
88+
return [calcHover(pointData, x, y, trace)];
11589
}
11690

11791
module.exports = {

0 commit comments

Comments
 (0)