Skip to content

Commit eac9b3b

Browse files
committed
add hovertemplate to scattercarpet traces
1 parent b9cffc1 commit eac9b3b

File tree

5 files changed

+45
-15
lines changed

5 files changed

+45
-15
lines changed

src/components/fx/hover.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -940,7 +940,7 @@ function createHoverText(hoverData, opts, gd) {
940940
text = d[(hovermode === 'x' ? 'y' : 'x') + 'Label'] || '';
941941
}
942942
else if(d.xLabel === undefined) {
943-
if(d.yLabel !== undefined) text = d.yLabel;
943+
if(d.yLabel !== undefined && d.trace.type !== 'scattercarpet') text = d.yLabel;
944944
}
945945
else if(d.yLabel === undefined) text = d.xLabel;
946946
else text = '(' + d.xLabel + ', ' + d.yLabel + ')';

src/traces/scattercarpet/defaults.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,9 @@ module.exports = function supplyDefaults(traceIn, traceOut, defaultColor, layout
7878
if(traceOut.fill === 'tonext' || traceOut.fill === 'toself') {
7979
dfltHoverOn.push('fills');
8080
}
81-
coerce('hoveron', dfltHoverOn.join('+') || 'points');
81+
82+
var hoverOn = coerce('hoveron', dfltHoverOn.join('+') || 'points');
83+
if(hoverOn !== 'fills') coerce('hovertemplate');
8284

8385
Lib.coerceSelectionMarkerOpacity(traceOut, coerce);
8486
};

src/traces/scattercarpet/event_data.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ module.exports = function eventData(out, pt, trace, cd, pointNumber) {
1313

1414
out.a = cdi.a;
1515
out.b = cdi.b;
16+
out.y = cdi.y;
1617

1718
return out;
1819
};

src/traces/scattercarpet/hover.js

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,15 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
4848

4949
var trace = newPointData.trace;
5050
var carpet = trace._carpet;
51-
var hoverinfo = cdi.hi || trace.hoverinfo;
52-
var parts = hoverinfo.split('+');
51+
52+
var ij = carpet.ab2ij([cdi.a, cdi.b]);
53+
var i0 = Math.floor(ij[0]);
54+
var ti = ij[0] - i0;
55+
var j0 = Math.floor(ij[1]);
56+
var tj = ij[1] - j0;
57+
var xy = carpet.evalxy([], i0, j0, ti, tj);
58+
newPointData.yLabel = xy[1].toFixed(3);
59+
5360
var text = [];
5461

5562
function textPart(ax, val) {
@@ -64,21 +71,19 @@ module.exports = function hoverPoints(pointData, xval, yval, hovermode) {
6471
text.push(prefix + ': ' + val.toFixed(3) + ax.labelsuffix);
6572
}
6673

67-
if(parts.indexOf('all') !== -1) parts = ['a', 'b'];
68-
if(parts.indexOf('a') !== -1) textPart(carpet.aaxis, cdi.a);
69-
if(parts.indexOf('b') !== -1) textPart(carpet.baxis, cdi.b);
7074

71-
var ij = carpet.ab2ij([cdi.a, cdi.b]);
72-
var i0 = Math.floor(ij[0]);
73-
var ti = ij[0] - i0;
75+
if(!trace.hovertemplate) {
76+
var hoverinfo = cdi.hi || trace.hoverinfo;
77+
var parts = hoverinfo.split('+');
7478

75-
var j0 = Math.floor(ij[1]);
76-
var tj = ij[1] - j0;
79+
if(parts.indexOf('all') !== -1) parts = ['a', 'b'];
80+
if(parts.indexOf('a') !== -1) textPart(carpet.aaxis, cdi.a);
81+
if(parts.indexOf('b') !== -1) textPart(carpet.baxis, cdi.b);
7782

78-
var xy = carpet.evalxy([], i0, j0, ti, tj);
79-
text.push('y: ' + xy[1].toFixed(3));
83+
text.push('y: ' + newPointData.yLabel);
8084

81-
newPointData.extraText = text.join('<br>');
85+
newPointData.extraText = text.join('<br>');
86+
}
8287

8388
return scatterPointData;
8489
};

test/jasmine/tests/carpet_test.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -678,6 +678,28 @@ describe('scattercarpet hover labels', function() {
678678
)
679679
.then(done);
680680
});
681+
682+
it('should generate hover label with *hovertemplate*', function(done) {
683+
var fig = Lib.extendDeep({}, require('@mocks/scattercarpet.json'));
684+
fig.data[5].hovertemplate = 'f(%{a}, %{b}) = %{y}<extra>scattercarpet #%{curveNumber}</extra>';
685+
686+
run(
687+
[200, 200], fig,
688+
[['f(0.2, 3.5) = 2.900'], 'scattercarpet #5']
689+
)
690+
.then(done);
691+
});
692+
693+
it('should generate hover label with arrayOk *hovertemplate*', function(done) {
694+
var fig = Lib.extendDeep({}, require('@mocks/scattercarpet.json'));
695+
fig.data[5].hovertemplate = ['', '', '', 'f(%{a}, %{b}) = %{y:.1f}<extra>pt #%{pointNumber}</extra>'];
696+
697+
run(
698+
[200, 200], fig,
699+
[['f(0.2, 3.5) = 3.0'], 'pt #3']
700+
)
701+
.then(done);
702+
});
681703
});
682704

683705
describe('contourcarpet plotting & editing', function() {

0 commit comments

Comments
 (0)