Skip to content

Commit 4ec88ef

Browse files
committed
add support for per-point hoverlabel setting in 2d z traces
1 parent 9ee8877 commit 4ec88ef

File tree

3 files changed

+86
-10
lines changed

3 files changed

+86
-10
lines changed

src/components/fx/calc.js

+16-7
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
'use strict';
1010

1111
var Lib = require('../../lib');
12+
var Registry = require('../../registry');
1213

1314
module.exports = function calc(gd) {
1415
var calcdata = gd.calcdata;
@@ -17,12 +18,20 @@ module.exports = function calc(gd) {
1718
var cd = calcdata[i];
1819
var trace = cd[0].trace;
1920

20-
if(trace.hoverlabel) {
21-
Lib.mergeArray(trace.hoverlabel.bgcolor, cd, 'hbg');
22-
Lib.mergeArray(trace.hoverlabel.bordercolor, cd, 'hbc');
23-
Lib.mergeArray(trace.hoverlabel.font.size, cd, 'hts');
24-
Lib.mergeArray(trace.hoverlabel.font.color, cd, 'htc');
25-
Lib.mergeArray(trace.hoverlabel.font.family, cd, 'htf');
26-
}
21+
if(!trace.hoverlabel) continue;
22+
23+
var mergeFn = Registry.traceIs(trace, '2dMap') ? paste : Lib.mergeArray;
24+
25+
mergeFn(trace.hoverlabel.bgcolor, cd, 'hbg');
26+
mergeFn(trace.hoverlabel.bordercolor, cd, 'hbc');
27+
mergeFn(trace.hoverlabel.font.size, cd, 'hts');
28+
mergeFn(trace.hoverlabel.font.color, cd, 'htc');
29+
mergeFn(trace.hoverlabel.font.family, cd, 'htf');
2730
}
2831
};
32+
33+
function paste(traceAttr, cd, cdAttr) {
34+
if(Array.isArray(traceAttr)) {
35+
cd[0][cdAttr] = traceAttr;
36+
}
37+
}

src/components/fx/hover.js

+14-3
Original file line numberDiff line numberDiff line change
@@ -1053,6 +1053,7 @@ function alignHoverText(hoverLabels, rotateLabels) {
10531053

10541054
function cleanPoint(d, hovermode) {
10551055
var trace = d.trace || {};
1056+
var cd0 = d.cd[0];
10561057
var cd = d.cd[d.index] || {};
10571058

10581059
d.posref = hovermode === 'y' ? (d.x0 + d.x1) / 2 : (d.y0 + d.y1) / 2;
@@ -1133,10 +1134,20 @@ function cleanPoint(d, hovermode) {
11331134
}
11341135

11351136
function fill(key, calcKey, traceKey) {
1136-
if(cd[calcKey]) return d[key] = cd[calcKey];
1137+
var val;
1138+
1139+
if(cd[calcKey]) {
1140+
val = cd[calcKey];
1141+
} else if(cd0[calcKey]) {
1142+
var arr = cd0[calcKey];
1143+
if(Array.isArray(arr) && Array.isArray(arr[d.index[0]])) {
1144+
val = arr[d.index[0]][d.index[1]];
1145+
}
1146+
} else {
1147+
val = Lib.nestedProperty(trace, traceKey).get();
1148+
}
11371149

1138-
var traceVal = Lib.nestedProperty(trace, traceKey).get();
1139-
if(traceVal) return d[key] = traceVal;
1150+
d[key] = val;
11401151
}
11411152

11421153
fill('color', 'hbg', 'hoverlabel.bgcolor');

test/jasmine/tests/hover_label_test.js

+56
Original file line numberDiff line numberDiff line change
@@ -1069,4 +1069,60 @@ describe('Test hover label custom styling:', function() {
10691069
.catch(fail)
10701070
.then(done);
10711071
});
1072+
1073+
it('should work for 2d z cartesian traces', function(done) {
1074+
var gd = createGraphDiv();
1075+
1076+
Plotly.plot(gd, [{
1077+
type: 'heatmap',
1078+
x: [1, 2],
1079+
y: [1, 2],
1080+
z: [[1, 2], [2, 3]],
1081+
hoverlabel: {
1082+
font: {
1083+
color: 'red',
1084+
size: [[10, 20], [21, 11]]
1085+
}
1086+
}
1087+
}], {
1088+
hoverlabel: {
1089+
bordercolor: 'blue',
1090+
font: { family: 'Gravitas'}
1091+
}
1092+
})
1093+
.then(function() {
1094+
_hover(gd, { xval: 1, yval: 1 });
1095+
1096+
assertPtLabel({
1097+
path: ['rgb(68, 68, 68)', 'rgb(0, 0, 255)'],
1098+
text: [10, 'Gravitas', 'rgb(255, 0, 0)']
1099+
});
1100+
})
1101+
.then(function() {
1102+
_hover(gd, { xval: 2, yval: 1 });
1103+
1104+
assertPtLabel({
1105+
path: ['rgb(68, 68, 68)', 'rgb(0, 0, 255)'],
1106+
text: [20, 'Gravitas', 'rgb(255, 0, 0)']
1107+
});
1108+
})
1109+
.then(function() {
1110+
_hover(gd, { xval: 1, yval: 2 });
1111+
1112+
assertPtLabel({
1113+
path: ['rgb(68, 68, 68)', 'rgb(0, 0, 255)'],
1114+
text: [21, 'Gravitas', 'rgb(255, 0, 0)']
1115+
});
1116+
})
1117+
.then(function() {
1118+
_hover(gd, { xval: 2, yval: 2 });
1119+
1120+
assertPtLabel({
1121+
path: ['rgb(68, 68, 68)', 'rgb(0, 0, 255)'],
1122+
text: [11, 'Gravitas', 'rgb(255, 0, 0)']
1123+
});
1124+
})
1125+
.catch(fail)
1126+
.then(done);
1127+
});
10721128
});

0 commit comments

Comments
 (0)