Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 82cbe93

Browse filesBrowse files
committed
fix plotly#3840 - use half delta for one-side violin hover label placement
1 parent 875aba8 commit 82cbe93
Copy full SHA for 82cbe93

File tree

Expand file treeCollapse file tree

2 files changed

+34
-2
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+34
-2
lines changed

‎src/traces/box/hover.js

Copy file name to clipboardExpand all lines: src/traces/box/hover.js
+8-2Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ function hoverOnBoxes(pointData, xval, yval, hovermode) {
5858
hoverPseudoDistance, spikePseudoDistance;
5959

6060
var boxDelta = t.bdPos;
61+
var boxDeltaPos, boxDeltaNeg;
6162
var posAcceptance = t.wHover;
6263
var shiftPos = function(di) { return di.pos + t.bPos - pVal; };
6364

@@ -67,18 +68,23 @@ function hoverOnBoxes(pointData, xval, yval, hovermode) {
6768
var pos = shiftPos(di);
6869
return Fx.inbox(pos, pos + posAcceptance, hoverPseudoDistance);
6970
};
71+
boxDeltaPos = boxDelta;
72+
boxDeltaNeg = 0;
7073
}
7174
if(trace.side === 'negative') {
7275
dPos = function(di) {
7376
var pos = shiftPos(di);
7477
return Fx.inbox(pos - posAcceptance, pos, hoverPseudoDistance);
7578
};
79+
boxDeltaPos = 0;
80+
boxDeltaNeg = boxDelta;
7681
}
7782
} else {
7883
dPos = function(di) {
7984
var pos = shiftPos(di);
8085
return Fx.inbox(pos - posAcceptance, pos + posAcceptance, hoverPseudoDistance);
8186
};
87+
boxDeltaPos = boxDeltaNeg = boxDelta;
8288
}
8389

8490
var dVal;
@@ -134,8 +140,8 @@ function hoverOnBoxes(pointData, xval, yval, hovermode) {
134140
else if(Color.opacity(mc) && trace.boxpoints) pointData.color = mc;
135141
else pointData.color = trace.fillcolor;
136142

137-
pointData[pLetter + '0'] = pAxis.c2p(di.pos + t.bPos - boxDelta, true);
138-
pointData[pLetter + '1'] = pAxis.c2p(di.pos + t.bPos + boxDelta, true);
143+
pointData[pLetter + '0'] = pAxis.c2p(di.pos + t.bPos - boxDeltaNeg, true);
144+
pointData[pLetter + '1'] = pAxis.c2p(di.pos + t.bPos + boxDeltaPos, true);
139145

140146
pointData[pLetter + 'LabelVal'] = di.pos;
141147

‎test/jasmine/tests/violin_test.js

Copy file name to clipboardExpand all lines: test/jasmine/tests/violin_test.js
+26Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,14 @@ describe('Test violin hover:', function() {
347347
return Plotly.plot(gd, fig).then(function() {
348348
mouseEvent('mousemove', pos[0], pos[1]);
349349
assertHoverLabelContent(specs);
350+
351+
if(specs.hoverLabelPos) {
352+
d3.selectAll('g.hovertext').each(function(_, i) {
353+
var bbox = this.getBoundingClientRect();
354+
expect([bbox.bottom, bbox.top])
355+
.toBeWithinArray(specs.hoverLabelPos[i], 10, 'bottom--top hover label ' + i);
356+
});
357+
}
350358
});
351359
}
352360

@@ -512,6 +520,24 @@ describe('Test violin hover:', function() {
512520
nums: 'x: 42.43046, kde: 0.083',
513521
name: '',
514522
axis: 'Saturday'
523+
}, {
524+
desc: 'one-sided violin under hovermode y (ridgeplot case)',
525+
mock: require('@mocks/violin_ridgeplot.json'),
526+
patch: function(fig) {
527+
fig.data.forEach(function(t) { t.hoveron = 'violins'; });
528+
fig.layout.hovermode = 'y';
529+
return fig;
530+
},
531+
nums: [
532+
'max: 50.81', 'median: 18.24', 'min: 3.07',
533+
'q1: 13.8575', 'q3: 24.975', 'upper fence: 39.42'
534+
],
535+
name: ['', '', '', '', '', ''],
536+
axis: 'Sat',
537+
hoverLabelPos: [
538+
[364, 270], [339, 270], [352, 270],
539+
[346, 270], [349, 270], [387, 270]
540+
]
515541
}, {
516542
desc: 'single horizontal violin',
517543
mock: require('@mocks/violin_non-linear.json'),

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.