Skip to content

Commit e6223b6

Browse files
committed
🌴 scatterpolar <-> scatterpolargl hoverPoints
1 parent 8e3a0ba commit e6223b6

File tree

3 files changed

+29
-47
lines changed

3 files changed

+29
-47
lines changed

src/traces/scatterpolar/hover.js

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ var scatterHover = require('../scatter/hover');
1212
var Axes = require('../../plots/cartesian/axes');
1313
var Lib = require('../../lib');
1414

15-
module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
15+
function hoverPoints(pointData, xval, yval, hovermode) {
1616
var scatterPointData = scatterHover(pointData, xval, yval, hovermode);
1717
if(!scatterPointData || scatterPointData[0].index === false) return;
1818

@@ -25,23 +25,29 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
2525

2626
var subplot = pointData.subplot;
2727
var cdi = newPointData.cd[newPointData.index];
28+
var trace = newPointData.trace;
2829

2930
if(!subplot.isPtWithinSector(cdi)) return;
3031

3132
newPointData.xLabelVal = undefined;
3233
newPointData.yLabelVal = undefined;
34+
newPointData.extraText = makeHoverPointText(cdi, trace, subplot);
3335

34-
var trace = newPointData.trace;
36+
return scatterPointData;
37+
}
38+
39+
function makeHoverPointText(cdi, trace, subplot) {
3540
var radialAxis = subplot.radialAxis;
3641
var angularAxis = subplot.angularAxis;
3742
var hoverinfo = cdi.hi || trace.hoverinfo;
3843
var parts = hoverinfo.split('+');
3944
var text = [];
40-
var rad = angularAxis._c2rad(cdi.theta, trace.thetaunit);
4145

4246
radialAxis._hovertitle = 'r';
4347
angularAxis._hovertitle = 'θ';
4448

49+
var rad = angularAxis._c2rad(cdi.theta, trace.thetaunit);
50+
4551
// show theta value in unit of angular axis
4652
var theta;
4753
if(angularAxis.type === 'linear' && trace.thetaunit !== angularAxis.thetaunit) {
@@ -58,7 +64,10 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
5864
if(parts.indexOf('r') !== -1) textPart(radialAxis, radialAxis.c2r(cdi.r));
5965
if(parts.indexOf('theta') !== -1) textPart(angularAxis, theta);
6066

61-
newPointData.extraText = text.join('<br>');
67+
return text.join('<br>');
68+
}
6269

63-
return scatterPointData;
70+
module.exports = {
71+
hoverPoints: hoverPoints,
72+
makeHoverPointText: makeHoverPointText
6473
};

src/traces/scatterpolar/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ module.exports = {
1919
calc: require('./calc'),
2020
plot: require('./plot'),
2121
style: require('../scatter/style').style,
22-
hoverPoints: require('./hover'),
22+
hoverPoints: require('./hover').hoverPoints,
2323
selectPoints: require('../scatter/select'),
2424

2525
meta: {

src/traces/scatterpolargl/index.js

Lines changed: 14 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,14 @@
88

99
'use strict';
1010

11-
var ScatterGl = require('../scattergl');
11+
var kdtree = require('kdgrass');
1212
var isNumeric = require('fast-isnumeric');
13+
14+
var ScatterGl = require('../scattergl');
1315
var calcColorscales = require('../scatter/colorscale_calc');
1416
var Axes = require('../../plots/cartesian/axes');
15-
var kdtree = require('kdgrass');
16-
var Lib = require('../../lib');
17+
var makeHoverPointText = require('../scatterpolar/hover').makeHoverPointText;
18+
var subTypes = require('../scatter/subtypes');
1719

1820
function calc(container, trace) {
1921
var layout = container._fullLayout;
@@ -101,7 +103,9 @@ function plot(container, subplot, cdata) {
101103
if((options.errorX || options.errorY) && !scene.error2d) scene.error2d = true;
102104

103105
// bring positions to selected/unselected options
104-
options.selected.positions = options.unselected.positions = options.marker.positions;
106+
if(subTypes.hasMarkers(trace)) {
107+
options.selected.positions = options.unselected.positions = options.marker.positions;
108+
}
105109

106110
// save scene options batch
107111
scene.lineOptions.push(options.line);
@@ -130,67 +134,36 @@ function plot(container, subplot, cdata) {
130134
return ScatterGl.plot(container, subplot, cdata);
131135
}
132136

133-
// TODO dry up with ScatterPolar.hoverPoints
134137
function hoverPoints(pointData, xval, yval, hovermode) {
135-
var cd = pointData.cd,
136-
stash = cd[0].t,
137-
rArray = stash.r,
138-
thetaArray = stash.theta;
138+
var cd = pointData.cd;
139+
var stash = cd[0].t;
140+
var rArray = stash.r;
141+
var thetaArray = stash.theta;
139142

140143
var scatterPointData = ScatterGl.hoverPoints(pointData, xval, yval, hovermode);
141-
142144
if(!scatterPointData || scatterPointData[0].index === false) return;
143145

144146
var newPointData = scatterPointData[0];
145147

146-
// hovering on fill case
147-
// TODO do we need to constrain the scatter point data further (like for
148-
// ternary subplots) or not?
149148
if(newPointData.index === undefined) {
150149
return scatterPointData;
151150
}
152151

153152
var subplot = pointData.subplot;
153+
var angularAxis = subplot.angularAxis;
154154
var cdi = newPointData.cd[newPointData.index];
155155
var trace = newPointData.trace;
156-
var radialAxis = subplot.radialAxis;
157-
var angularAxis = subplot.angularAxis;
158-
var hoverinfo = cdi.hi || trace.hoverinfo;
159-
var parts = hoverinfo.split('+');
160-
var text = [];
161156

162157
// augment pointData with r/theta param
163158
cdi.r = rArray[newPointData.index];
164159
cdi.theta = thetaArray[newPointData.index];
165160
cdi.rad = angularAxis.c2rad(cdi.theta, trace.thetaunit);
166161

167-
var _rad = angularAxis.c2rad(cdi.theta, trace.thetaunit);
168-
169162
if(!subplot.isPtWithinSector(cdi)) return;
170163

171164
newPointData.xLabelVal = undefined;
172165
newPointData.yLabelVal = undefined;
173-
174-
radialAxis._hovertitle = 'r';
175-
angularAxis._hovertitle = 'θ';
176-
177-
// show theta value in unit of angular axis
178-
var theta;
179-
if(angularAxis.type === 'linear' && trace.thetaunit !== angularAxis.thetaunit) {
180-
theta = angularAxis.thetaunit === 'degrees' ? Lib.rad2deg(_rad) : _rad;
181-
} else {
182-
theta = cdi.theta;
183-
}
184-
185-
function textPart(ax, val) {
186-
text.push(ax._hovertitle + ': ' + Axes.tickText(ax, val, 'hover').text);
187-
}
188-
189-
if(parts.indexOf('all') !== -1) parts = ['r', 'theta'];
190-
if(parts.indexOf('r') !== -1) textPart(radialAxis, cdi.r);
191-
if(parts.indexOf('theta') !== -1) textPart(angularAxis, theta);
192-
193-
newPointData.extraText = text.join('<br>');
166+
newPointData.extraText = makeHoverPointText(cdi, trace, subplot);
194167

195168
return scatterPointData;
196169
}

0 commit comments

Comments
 (0)