From dcc5aee0ace1acca4f7580f52f8204f3e87f77a1 Mon Sep 17 00:00:00 2001 From: keeganmccallum Date: Thu, 23 Jun 2016 18:23:39 -0400 Subject: [PATCH 1/4] fix issue with bar releative mode when first bucket is 0 or string --- src/traces/bar/set_positions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/traces/bar/set_positions.js b/src/traces/bar/set_positions.js index dbc68616224..81010adb2b4 100644 --- a/src/traces/bar/set_positions.js +++ b/src/traces/bar/set_positions.js @@ -149,7 +149,7 @@ module.exports = function setPositions(gd, plotinfo) { sv = Math.round(ti[j].p / sumround); // store the negative sum value for p at the same key, with sign flipped - if(relative && ti[j].s < 0) sv = -sv; + if(relative && ti[j].s < 0) sv = '-'+sv; // use string to ensure -0 !== 0 var previousSum = sums[sv] || 0; if(stack || relative) ti[j].b = previousSum; barEnd = ti[j].b + ti[j].s; From d2797165438f99b5615b9b95e1ec741e61fb298d Mon Sep 17 00:00:00 2001 From: keeganmccallum Date: Thu, 23 Jun 2016 18:40:47 -0400 Subject: [PATCH 2/4] fix formatting --- src/traces/bar/set_positions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/traces/bar/set_positions.js b/src/traces/bar/set_positions.js index 81010adb2b4..58b69ba8ef6 100644 --- a/src/traces/bar/set_positions.js +++ b/src/traces/bar/set_positions.js @@ -149,7 +149,7 @@ module.exports = function setPositions(gd, plotinfo) { sv = Math.round(ti[j].p / sumround); // store the negative sum value for p at the same key, with sign flipped - if(relative && ti[j].s < 0) sv = '-'+sv; // use string to ensure -0 !== 0 + if(relative && ti[j].s < 0) sv = '-' + sv; // use string to ensure -0 !== 0 var previousSum = sums[sv] || 0; if(stack || relative) ti[j].b = previousSum; barEnd = ti[j].b + ti[j].s; @@ -178,7 +178,7 @@ module.exports = function setPositions(gd, plotinfo) { for(j = 0; j < ti.length; j++) { relAndNegative = relative && ti[j].s < 0; sv = Math.round(ti[j].p / sumround); - if(relAndNegative) sv = -sv; // locate negative sum amount for this p val + if(relAndNegative) sv = '-' + sv; // locate negative sum amount for this p val scale = top / sums[sv]; if(relAndNegative) scale *= -1; // preserve sign if negative ti[j].b *= scale; From d931a9ea97faead10c3d3ef11011af645bf9f819 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 5 Jul 2016 15:36:41 -0400 Subject: [PATCH 3/4] lint: bar setPositions comments + spaces --- src/traces/bar/set_positions.js | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/traces/bar/set_positions.js b/src/traces/bar/set_positions.js index 58b69ba8ef6..2a670a63536 100644 --- a/src/traces/bar/set_positions.js +++ b/src/traces/bar/set_positions.js @@ -148,8 +148,11 @@ module.exports = function setPositions(gd, plotinfo) { if(!isNumeric(ti[j].s)) continue; sv = Math.round(ti[j].p / sumround); - // store the negative sum value for p at the same key, with sign flipped - if(relative && ti[j].s < 0) sv = '-' + sv; // use string to ensure -0 !== 0 + + // store the negative sum value for p at the same key, + // with sign flipped using string to ensure -0 !== 0. + if(relative && ti[j].s < 0) sv = '-' + sv; + var previousSum = sums[sv] || 0; if(stack || relative) ti[j].b = previousSum; barEnd = ti[j].b + ti[j].s; @@ -167,20 +170,29 @@ module.exports = function setPositions(gd, plotinfo) { } if(norm) { - padded = false; var top = norm === 'fraction' ? 1 : 100, relAndNegative = false, tiny = top / 1e9; // in case of rounding error in sum + + padded = false; sMin = 0; sMax = stack ? top : 0; + for(i = 0; i < bl.length; i++) { // trace index ti = gd.calcdata[bl[i]]; + for(j = 0; j < ti.length; j++) { - relAndNegative = relative && ti[j].s < 0; + relAndNegative = (relative && ti[j].s < 0); + sv = Math.round(ti[j].p / sumround); - if(relAndNegative) sv = '-' + sv; // locate negative sum amount for this p val + + // locate negative sum amount for this p val + if(relAndNegative) sv = '-' + sv; + scale = top / sums[sv]; - if(relAndNegative) scale *= -1; // preserve sign if negative + + // preserve sign if negative + if(relAndNegative) scale *= -1; ti[j].b *= scale; ti[j].s *= scale; barEnd = ti[j].b + ti[j].s; From 71155cdc296be0e49f70ce8da581744ba5f889a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89tienne=20T=C3=A9treault-Pinard?= Date: Tue, 5 Jul 2016 15:37:21 -0400 Subject: [PATCH 4/4] test: add bar setPositions test cases for relative of pos 0 / -0 --- test/jasmine/tests/bar_test.js | 40 ++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/test/jasmine/tests/bar_test.js b/test/jasmine/tests/bar_test.js index 365891170d9..be35de30694 100644 --- a/test/jasmine/tests/bar_test.js +++ b/test/jasmine/tests/bar_test.js @@ -183,4 +183,44 @@ describe('heatmap calc / setPositions', function() { assertTraceField(out, 't.dbar', [1, 1]); }); + it('should fill in calc pt fields (relative case)', function() { + var out = _calc([{ + y: [20, 14, -23] + }, { + y: [-12, -18, -29] + }], { + barmode: 'relative' + }); + + assertPtField(out, 'x', [[0, 1, 2], [0, 1, 2]]); + assertPtField(out, 'y', [[20, 14, -23], [-12, -18, -52]]); + assertPtField(out, 'b', [[0, 0, 0], [0, 0, -23]]); + assertPtField(out, 's', [[20, 14, -23], [-12, -18, -29]]); + assertPtField(out, 'p', [[0, 1, 2], [0, 1, 2]]); + assertTraceField(out, 't.barwidth', [0.8, 0.8]); + assertTraceField(out, 't.poffset', [-0.4, -0.4]); + assertTraceField(out, 't.dbar', [1, 1]); + }); + + it('should fill in calc pt fields (relative / percent case)', function() { + var out = _calc([{ + x: ['A', 'B', 'C', 'D'], + y: [20, 14, 40, -60] + }, { + x: ['A', 'B', 'C', 'D'], + y: [-12, -18, 60, -40] + }], { + barmode: 'relative', + barnorm: 'percent' + }); + + assertPtField(out, 'x', [[0, 1, 2, 3], [0, 1, 2, 3]]); + assertPtField(out, 'y', [[100, 100, 40, -60], [-100, -100, 100, -100]]); + assertPtField(out, 'b', [[0, 0, 0, 0], [0, 0, 40, -60]]); + assertPtField(out, 's', [[100, 100, 40, -60], [-100, -100, 60, -40]]); + assertPtField(out, 'p', [[0, 1, 2, 3], [0, 1, 2, 3]]); + assertTraceField(out, 't.barwidth', [0.8, 0.8]); + assertTraceField(out, 't.poffset', [-0.4, -0.4]); + assertTraceField(out, 't.dbar', [1, 1]); + }); });