Skip to content

Commit 0144f06

Browse files
committed
fill in non-numeric bar items in calcdata
- as per AJ's recommendation - and skip over them in setPositions - use BADNUM constant to skip over non-numeric items (recall: non-numeric values are set to BADNUM in makeCalcdata)
1 parent 5279f99 commit 0144f06

File tree

4 files changed

+14
-23
lines changed

4 files changed

+14
-23
lines changed

Diff for: src/traces/bar/calc.js

+2-15
Original file line numberDiff line numberDiff line change
@@ -49,24 +49,11 @@ module.exports = function calc(gd, trace) {
4949

5050
// create the "calculated data" to plot
5151
var serieslen = Math.min(pos.length, size.length),
52-
cd = [];
52+
cd = new Array(serieslen);
5353

5454
// set position and size
5555
for(i = 0; i < serieslen; i++) {
56-
var p = pos[i];
57-
var s = size[i];
58-
59-
// add bars with non-numeric sizes to calcdata
60-
// so that ensure that traces with gaps are
61-
// plotted in the correct order
62-
63-
if(isNumeric(p)) {
64-
if(isNumeric(s)) {
65-
cd.push({ p: p, s: s });
66-
} else {
67-
cd.push({ p: p });
68-
}
69-
}
56+
cd[i] = { p: pos[i], s: size[i] };
7057
}
7158

7259
// set base

Diff for: src/traces/bar/set_positions.js

+7-4
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
'use strict';
1111

1212
var isNumeric = require('fast-isnumeric');
13+
var BADNUM = require('../../constants/numerical').BADNUM;
1314

1415
var Registry = require('../../registry');
1516
var Axes = require('../../plots/cartesian/axes');
@@ -188,7 +189,7 @@ function setGroupPositionsInStackOrRelativeMode(gd, pa, sa, calcTraces) {
188189
for(var j = 0; j < calcTrace.length; j++) {
189190
var bar = calcTrace[j];
190191

191-
if(!isNumeric(bar.s)) continue;
192+
if(bar.s === BADNUM) continue;
192193

193194
var isOutmostBar = ((bar.b + bar.s) === sieve.get(bar.p, bar.s));
194195
if(isOutmostBar) bar._outmost = true;
@@ -395,6 +396,8 @@ function setBarCenter(gd, pa, sieve) {
395396
calcBar[pLetter] = calcBar.p +
396397
((poffsetIsArray) ? poffset[j] : poffset) +
397398
((barwidthIsArray) ? barwidth[j] : barwidth) / 2;
399+
400+
398401
}
399402
}
400403
}
@@ -502,7 +505,7 @@ function stackBars(gd, sa, sieve) {
502505
for(j = 0; j < trace.length; j++) {
503506
bar = trace[j];
504507

505-
if(!isNumeric(bar.s)) continue;
508+
if(bar.s === BADNUM) continue;
506509

507510
// stack current bar and get previous sum
508511
var barBase = sieve.put(bar.p, bar.b + bar.s),
@@ -533,7 +536,7 @@ function sieveBars(gd, sa, sieve) {
533536
for(var j = 0; j < trace.length; j++) {
534537
var bar = trace[j];
535538

536-
if(isNumeric(bar.s)) sieve.put(bar.p, bar.b + bar.s);
539+
if(bar.s !== BADNUM) sieve.put(bar.p, bar.b + bar.s);
537540
}
538541
}
539542
}
@@ -569,7 +572,7 @@ function normalizeBars(gd, sa, sieve) {
569572
for(var j = 0; j < trace.length; j++) {
570573
var bar = trace[j];
571574

572-
if(!isNumeric(bar.s)) continue;
575+
if(bar.s === BADNUM) continue;
573576

574577
var scale = Math.abs(sTop / sieve.get(bar.p, bar.s));
575578
bar.b *= scale;

Diff for: src/traces/bar/sieve.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
module.exports = Sieve;
1212

1313
var Lib = require('../../lib');
14+
var BADNUM = require('../../constants/numerical').BADNUM;
1415

1516
/**
1617
* Helper class to sieve data from traces into bins
@@ -34,7 +35,7 @@ function Sieve(traces, separateNegativeValues, dontMergeOverlappingData) {
3435
var trace = traces[i];
3536
for(var j = 0; j < trace.length; j++) {
3637
var bar = trace[j];
37-
positions.push(bar.p);
38+
if(bar.p !== BADNUM) positions.push(bar.p);
3839
}
3940
}
4041
this.positions = positions;

Diff for: test/jasmine/tests/bar_test.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -284,15 +284,15 @@ describe('Bar.calc', function() {
284284
assertPointField(cd, 'b', [[0, 1, 2], [0, 1, 0], [0, 0]]);
285285
});
286286

287-
it('should exclude items with non-numeric x/y from calcdata', function() {
287+
it('should not exclude items with non-numeric x/y from calcdata', function() {
288288
var gd = mockBarPlot([{
289289
x: [5, NaN, 15, 20, null, 21],
290290
y: [20, NaN, 23, 25, null, 26]
291291
}]);
292292

293293
var cd = gd.calcdata;
294-
assertPointField(cd, 'x', [[5, 15, 20, 21]]);
295-
assertPointField(cd, 'y', [[20, 23, 25, 26]]);
294+
assertPointField(cd, 'x', [[5, NaN, 15, 20, NaN, 21]]);
295+
assertPointField(cd, 'y', [[20, NaN, 23, 25, NaN, 26]]);
296296
});
297297

298298
it('should not exclude items with non-numeric y from calcdata (to plots gaps correctly)', function() {

0 commit comments

Comments
 (0)