Skip to content

Commit 4b1da24

Browse files
committed
limit minDiff maximum to 1 for category axes
1 parent fd1a26a commit 4b1da24

File tree

5 files changed

+19
-16
lines changed

5 files changed

+19
-16
lines changed

src/lib/search.js

+2-6
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,7 @@ exports.sorterDes = function(a, b) { return b - a; };
6262
* just be off by a rounding error
6363
* return the distinct values and the minimum difference between any two
6464
*/
65-
exports.distinctVals = function(valsIn, opts) {
66-
var unitMinDiff = (opts || {}).unitMinDiff;
67-
65+
exports.distinctVals = function(valsIn) {
6866
var vals = valsIn.slice(); // otherwise we sort the original array...
6967
vals.sort(exports.sorterAsc); // undefined listed in the end - also works on IE11
7068

@@ -73,9 +71,7 @@ exports.distinctVals = function(valsIn, opts) {
7371
if(vals[last] !== BADNUM) break;
7472
}
7573

76-
var minDiff = 1;
77-
if(!unitMinDiff) minDiff = (vals[last] - vals[0]) || 1;
78-
74+
var minDiff = (vals[last] - vals[0]) || 1;
7975
var errDiff = minDiff / (last || 1) / 10000;
8076
var newVals = [];
8177
var preV;

src/traces/bar/cross_trace_calc.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ function setGroupPositionsInOverlayMode(pa, sa, calcTraces, opts) {
172172
var calcTrace = calcTraces[i];
173173

174174
var sieve = new Sieve([calcTrace], {
175-
unitMinDiff: opts.xCat || opts.yCat,
175+
posAxis: pa,
176176
sepNegVal: false,
177177
overlapNoMerge: !opts.norm
178178
});
@@ -196,6 +196,7 @@ function setGroupPositionsInOverlayMode(pa, sa, calcTraces, opts) {
196196

197197
function setGroupPositionsInGroupMode(gd, pa, sa, calcTraces, opts) {
198198
var sieve = new Sieve(calcTraces, {
199+
posAxis: pa,
199200
sepNegVal: false,
200201
overlapNoMerge: !opts.norm
201202
});
@@ -205,7 +206,7 @@ function setGroupPositionsInGroupMode(gd, pa, sa, calcTraces, opts) {
205206

206207
// relative-stack bars within the same trace that would otherwise
207208
// be hidden
208-
unhideBarsWithinTrace(sieve);
209+
unhideBarsWithinTrace(sieve, pa);
209210

210211
// set bar bases and sizes, and update size axis
211212
if(opts.norm) {
@@ -218,6 +219,7 @@ function setGroupPositionsInGroupMode(gd, pa, sa, calcTraces, opts) {
218219

219220
function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, calcTraces, opts) {
220221
var sieve = new Sieve(calcTraces, {
222+
posAxis: pa,
221223
sepNegVal: opts.mode === 'relative',
222224
overlapNoMerge: !(opts.norm || opts.mode === 'stack' || opts.mode === 'relative')
223225
});
@@ -610,7 +612,7 @@ function sieveBars(sieve) {
610612
}
611613
}
612614

613-
function unhideBarsWithinTrace(sieve) {
615+
function unhideBarsWithinTrace(sieve, pa) {
614616
var calcTraces = sieve.traces;
615617

616618
for(var i = 0; i < calcTraces.length; i++) {
@@ -619,6 +621,7 @@ function unhideBarsWithinTrace(sieve) {
619621

620622
if(fullTrace.base === undefined) {
621623
var inTraceSieve = new Sieve([calcTrace], {
624+
posAxis: pa,
622625
sepNegVal: true,
623626
overlapNoMerge: true
624627
});

src/traces/bar/sieve.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -40,14 +40,17 @@ function Sieve(traces, opts) {
4040
}
4141
this.positions = positions;
4242

43-
var dv = distinctVals(positions, {
44-
unitMinDiff: opts.unitMinDiff
45-
});
43+
var dv = distinctVals(positions);
4644

4745
this.distinctPositions = dv.vals;
4846
if(dv.vals.length === 1 && width1 !== Infinity) this.minDiff = width1;
4947
else this.minDiff = Math.min(dv.minDiff, width1);
5048

49+
var type = (opts.posAxis || {}).type;
50+
if(type === 'category' || type === 'multicategory') {
51+
this.minDiff = Math.min(1, this.minDiff);
52+
}
53+
5154
this.binWidth = this.minDiff;
5255

5356
this.bins = {};

src/traces/box/calc.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ module.exports = function calc(gd, trace) {
4040
var allPosArrays = getPosArrays(trace, posLetter, posAxis, fullLayout[numKey]);
4141
var posArray = allPosArrays[0];
4242
var origPos = allPosArrays[1];
43-
var dv = Lib.distinctVals(posArray);
43+
var dv = Lib.distinctVals(posArray, posAxis);
4444
var posDistinct = dv.vals;
4545
var dPos = dv.minDiff / 2;
4646

src/traces/box/cross_trace_calc.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,10 @@ function setPositionOffset(traceType, gd, boxList, posAxis) {
6060
if(!pointList.length) return;
6161

6262
// box plots - update dPos based on multiple traces
63-
var boxdv = Lib.distinctVals(pointList, {
64-
unitMinDiff: posAxis.type === 'category' || posAxis.type === 'multicategory'
65-
});
63+
var boxdv = Lib.distinctVals(pointList);
64+
if(posAxis.type === 'category' || posAxis.type === 'multicategory') {
65+
boxdv.minDiff = Math.min(1, boxdv.minDiff);
66+
}
6667

6768
var dPos0 = boxdv.minDiff / 2;
6869

0 commit comments

Comments
 (0)