From 253048f6528bd542dd75161e4daa7b1bb54a773a Mon Sep 17 00:00:00 2001 From: keeganmccallum Date: Fri, 6 May 2016 12:28:48 -0400 Subject: [PATCH 1/9] relative barmode to stack negative values below axis --- src/traces/bar/layout_attributes.js | 4 +++- src/traces/bar/set_positions.js | 16 ++++++++++++---- test/image/mocks/bar_stackrelative_negative.json | 13 +++++++++++++ .../mocks/bar_stackrelativeto100_negative.json | 14 ++++++++++++++ 4 files changed, 42 insertions(+), 5 deletions(-) create mode 100644 test/image/mocks/bar_stackrelative_negative.json create mode 100644 test/image/mocks/bar_stackrelativeto100_negative.json diff --git a/src/traces/bar/layout_attributes.js b/src/traces/bar/layout_attributes.js index 31f5f00b593..e2cca32a822 100644 --- a/src/traces/bar/layout_attributes.js +++ b/src/traces/bar/layout_attributes.js @@ -12,13 +12,15 @@ module.exports = { barmode: { valType: 'enumerated', - values: ['stack', 'group', 'overlay'], + values: ['stack', 'group', 'overlay', 'relative'], dflt: 'group', role: 'info', description: [ 'Determines how bars at the same location coordinate', 'are displayed on the graph.', 'With *stack*, the bars are stacked on top of one another', + 'With *relative*, the bars are stacked on top of one another,', + 'with negative values below the axis, positive values above', 'With *group*, the bars are plotted next to one another', 'centered around the shared location.', 'With *overlay*, the bars are plotted over one another,', diff --git a/src/traces/bar/set_positions.js b/src/traces/bar/set_positions.js index 4e486113300..2a190122e6e 100644 --- a/src/traces/bar/set_positions.js +++ b/src/traces/bar/set_positions.js @@ -116,10 +116,11 @@ module.exports = function setPositions(gd, plotinfo) { else barposition(bl); var stack = (fullLayout.barmode === 'stack'), + relative = (fullLayout.barmode ==='relative'), norm = fullLayout.barnorm; // bar size range and stacking calculation - if(stack || norm) { + if(stack || relative || norm) { // for stacked bars, we need to evaluate every step in every // stack, because negative bars mean the extremes could be // anywhere @@ -142,13 +143,15 @@ module.exports = function setPositions(gd, plotinfo) { ti = gd.calcdata[bl[i]]; for(j = 0; j < ti.length; j++) { 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 = -Math.round(ti[j].p / sumround); var previousSum = sums[sv] || 0; - if(stack) ti[j].b = previousSum; + if(stack || relative) ti[j].b = previousSum; barEnd = ti[j].b + ti[j].s; sums[sv] = previousSum + ti[j].s; // store the bar top in each calcdata item - if(stack) { + if(stack || relative) { ti[j][sLetter] = barEnd; if(!norm && isNumeric(sa.c2l(barEnd))) { sMax = Math.max(sMax,barEnd); @@ -161,13 +164,18 @@ module.exports = function setPositions(gd, plotinfo) { if(norm) { padded = false; var top = norm==='fraction' ? 1 : 100, + isNegative = false, tiny = top/1e9; // in case of rounding error in sum 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++) { - scale = top / sums[Math.round(ti[j].p/sumround)]; + relAndNegative = relative && ti[j].s < 0; + sv = Math.round(ti[j].p/sumround); + if (relAndNegative) sv = -Math.round(ti[j].p/sumround); // locate negative sum amount for this p val + scale = top / sums[sv]; + if (relAndNegative) scale *= -1; // preserve sign if negative ti[j].b *= scale; ti[j].s *= scale; barEnd = ti[j].b + ti[j].s; diff --git a/test/image/mocks/bar_stackrelative_negative.json b/test/image/mocks/bar_stackrelative_negative.json new file mode 100644 index 00000000000..68e7e0d1ca1 --- /dev/null +++ b/test/image/mocks/bar_stackrelative_negative.json @@ -0,0 +1,13 @@ +{ + "data":[ + {"name":"Col1","y":["-1","2","3","4","5"],"x":["1","2","3","4","5"],"type":"bar","uid":"aeb9ea"}, + {"name":"Col2","y":["2","3","4","-3","2"],"x":["1","2","3","4","5"],"type":"bar","uid":"2f201d"}, + {"name":"Col3","y":["5","4","3","-2","1"],"x":["1","2","3","4","5"],"type":"bar","uid":"aef0bf"}, + {"name":"Col4","y":["-3","0","1","0","-3"],"x":["1","2","3","4","5"],"type":"bar","uid":"330b4d"} + ], + "layout":{ + "height":400, + "width":400, + "barmode":"relative" + } +} diff --git a/test/image/mocks/bar_stackrelativeto100_negative.json b/test/image/mocks/bar_stackrelativeto100_negative.json new file mode 100644 index 00000000000..c2174000a3a --- /dev/null +++ b/test/image/mocks/bar_stackrelativeto100_negative.json @@ -0,0 +1,14 @@ +{ + "data":[ + {"name":"Col1","y":["-1","2","3","4","5"],"x":["1","2","3","4","5"],"type":"bar","uid":"aeb9ea"}, + {"name":"Col2","y":["2","3","4","-3","2"],"x":["1","2","3","4","5"],"type":"bar","uid":"2f201d"}, + {"name":"Col3","y":["5","4","3","-2","1"],"x":["1","2","3","4","5"],"type":"bar","uid":"aef0bf"}, + {"name":"Col4","y":["-3","0","1","0","-3"],"x":["1","2","3","4","5"],"type":"bar","uid":"330b4d"} + ], + "layout":{ + "height":400, + "width":400, + "barmode":"relative", + "barnorm":"percent" + } +} From 0cfc5aa92a36c1545348652ed940a78925721d7a Mon Sep 17 00:00:00 2001 From: keeganmccallum Date: Fri, 6 May 2016 12:56:50 -0400 Subject: [PATCH 2/9] code cleanup --- src/traces/bar/set_positions.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/traces/bar/set_positions.js b/src/traces/bar/set_positions.js index 2a190122e6e..2ff6b8519bd 100644 --- a/src/traces/bar/set_positions.js +++ b/src/traces/bar/set_positions.js @@ -144,7 +144,7 @@ module.exports = function setPositions(gd, plotinfo) { for(j = 0; j < ti.length; j++) { 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 = -Math.round(ti[j].p / sumround); + 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; @@ -172,8 +172,8 @@ module.exports = function setPositions(gd, plotinfo) { ti = gd.calcdata[bl[i]]; for(j = 0; j < ti.length; j++) { relAndNegative = relative && ti[j].s < 0; - sv = Math.round(ti[j].p/sumround); - if (relAndNegative) sv = -Math.round(ti[j].p/sumround); // locate negative sum amount for this p val + sv = Math.round(ti[j].p / sumround); + 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 39d3fe29ea93ac515fab550ac97e3ab81ae1d857 Mon Sep 17 00:00:00 2001 From: keeganmccallum Date: Fri, 6 May 2016 13:00:27 -0400 Subject: [PATCH 3/9] JSON formatting for mocks --- .../bar_stackrelativeto100_negative.json | 32 ++++++++++++++++--- test/image/mocks/bar_stackto100_negative.json | 32 ++++++++++++++++--- 2 files changed, 56 insertions(+), 8 deletions(-) diff --git a/test/image/mocks/bar_stackrelativeto100_negative.json b/test/image/mocks/bar_stackrelativeto100_negative.json index c2174000a3a..8a7e3b4a8e4 100644 --- a/test/image/mocks/bar_stackrelativeto100_negative.json +++ b/test/image/mocks/bar_stackrelativeto100_negative.json @@ -1,9 +1,33 @@ { "data":[ - {"name":"Col1","y":["-1","2","3","4","5"],"x":["1","2","3","4","5"],"type":"bar","uid":"aeb9ea"}, - {"name":"Col2","y":["2","3","4","-3","2"],"x":["1","2","3","4","5"],"type":"bar","uid":"2f201d"}, - {"name":"Col3","y":["5","4","3","-2","1"],"x":["1","2","3","4","5"],"type":"bar","uid":"aef0bf"}, - {"name":"Col4","y":["-3","0","1","0","-3"],"x":["1","2","3","4","5"],"type":"bar","uid":"330b4d"} + { + "name":"Col1", + "y":["-1","2","3","4","5"], + "x":["1","2","3","4","5"], + "type":"bar", + "uid":"aeb9ea" + }, + { + "name":"Col2", + "y":["2","3","4","-3","2"], + "x":["1","2","3","4","5"], + "type":"bar", + "uid":"2f201d" + }, + { + "name":"Col3", + "y":["5","4","3","-2","1"], + "x":["1","2","3","4","5"], + "type":"bar", + "uid":"aef0bf" + }, + { + "name":"Col4", + "y":["-3","0","1","0","-3"], + "x":["1","2","3","4","5"], + "type":"bar", + "uid":"330b4d" + } ], "layout":{ "height":400, diff --git a/test/image/mocks/bar_stackto100_negative.json b/test/image/mocks/bar_stackto100_negative.json index 2fce003f1f2..2159f447b2c 100644 --- a/test/image/mocks/bar_stackto100_negative.json +++ b/test/image/mocks/bar_stackto100_negative.json @@ -1,9 +1,33 @@ { "data":[ - {"name":"Col1","y":["1","2","3","4","5"],"x":["1","2","3","4","5"],"type":"bar","uid":"aeb9ea"}, - {"name":"Col2","y":["2","3","4","3","2"],"x":["1","2","3","4","5"],"type":"bar","uid":"2f201d"}, - {"name":"Col3","y":["5","4","3","2","1"],"x":["1","2","3","4","5"],"type":"bar","uid":"aef0bf"}, - {"name":"Col4","y":["-1","0","1","0","-1"],"x":["1","2","3","4","5"],"type":"bar","uid":"330b4d"} + { + "name":"Col1", + "y":["1","2","3","4","5"], + "x":["1","2","3","4","5"], + "type":"bar", + "uid":"aeb9ea" + }, + { + "name":"Col2", + "y":["2","3","4","3","2"], + "x":["1","2","3","4","5"], + "type":"bar", + "uid":"2f201d" + }, + { + "name":"Col3", + "y":["5","4","3","2","1"], + "x":["1","2","3","4","5"], + "type":"bar", + "uid":"aef0bf" + }, + { + "name":"Col4", + "y":["-1","0","1","0","-1"], + "x":["1","2","3","4","5"], + "type":"bar", + "uid":"330b4d" + } ], "layout":{ "height":400, From e8f290f1e0d240d42543d5149a53d41ba822c2a9 Mon Sep 17 00:00:00 2001 From: keeganmccallum Date: Fri, 6 May 2016 13:02:01 -0400 Subject: [PATCH 4/9] JSON formatting for mocks --- .../mocks/bar_stackrelative_negative.json | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/test/image/mocks/bar_stackrelative_negative.json b/test/image/mocks/bar_stackrelative_negative.json index 68e7e0d1ca1..d2fcc1af76d 100644 --- a/test/image/mocks/bar_stackrelative_negative.json +++ b/test/image/mocks/bar_stackrelative_negative.json @@ -1,9 +1,33 @@ { "data":[ - {"name":"Col1","y":["-1","2","3","4","5"],"x":["1","2","3","4","5"],"type":"bar","uid":"aeb9ea"}, - {"name":"Col2","y":["2","3","4","-3","2"],"x":["1","2","3","4","5"],"type":"bar","uid":"2f201d"}, - {"name":"Col3","y":["5","4","3","-2","1"],"x":["1","2","3","4","5"],"type":"bar","uid":"aef0bf"}, - {"name":"Col4","y":["-3","0","1","0","-3"],"x":["1","2","3","4","5"],"type":"bar","uid":"330b4d"} + { + "name":"Col1", + "y":["-1","2","3","4","5"], + "x":["1","2","3","4","5"], + "type":"bar", + "uid":"aeb9ea" + }, + { + "name":"Col2", + "y":["2","3","4","-3","2"], + "x":["1","2","3","4","5"], + "type":"bar", + "uid":"2f201d" + }, + { + "name":"Col3", + "y":["5","4","3","-2","1"], + "x":["1","2","3","4","5"], + "type":"bar", + "uid":"aef0bf" + }, + { + "name":"Col4", + "y":["-3","0","1","0","-3"], + "x":["1","2","3","4","5"], + "type":"bar", + "uid":"330b4d" + } ], "layout":{ "height":400, From 61efab56e415835a29c356b1ac8fdcebdec600de Mon Sep 17 00:00:00 2001 From: keeganmccallum Date: Fri, 6 May 2016 13:03:23 -0400 Subject: [PATCH 5/9] remove UIDs in mocks --- test/image/mocks/bar_stackrelative_negative.json | 12 ++++-------- .../image/mocks/bar_stackrelativeto100_negative.json | 12 ++++-------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/test/image/mocks/bar_stackrelative_negative.json b/test/image/mocks/bar_stackrelative_negative.json index d2fcc1af76d..2849dda2747 100644 --- a/test/image/mocks/bar_stackrelative_negative.json +++ b/test/image/mocks/bar_stackrelative_negative.json @@ -4,29 +4,25 @@ "name":"Col1", "y":["-1","2","3","4","5"], "x":["1","2","3","4","5"], - "type":"bar", - "uid":"aeb9ea" + "type":"bar" }, { "name":"Col2", "y":["2","3","4","-3","2"], "x":["1","2","3","4","5"], - "type":"bar", - "uid":"2f201d" + "type":"bar" }, { "name":"Col3", "y":["5","4","3","-2","1"], "x":["1","2","3","4","5"], - "type":"bar", - "uid":"aef0bf" + "type":"bar" }, { "name":"Col4", "y":["-3","0","1","0","-3"], "x":["1","2","3","4","5"], - "type":"bar", - "uid":"330b4d" + "type":"bar" } ], "layout":{ diff --git a/test/image/mocks/bar_stackrelativeto100_negative.json b/test/image/mocks/bar_stackrelativeto100_negative.json index 8a7e3b4a8e4..16b6b18ca64 100644 --- a/test/image/mocks/bar_stackrelativeto100_negative.json +++ b/test/image/mocks/bar_stackrelativeto100_negative.json @@ -4,29 +4,25 @@ "name":"Col1", "y":["-1","2","3","4","5"], "x":["1","2","3","4","5"], - "type":"bar", - "uid":"aeb9ea" + "type":"bar" }, { "name":"Col2", "y":["2","3","4","-3","2"], "x":["1","2","3","4","5"], - "type":"bar", - "uid":"2f201d" + "type":"bar" }, { "name":"Col3", "y":["5","4","3","-2","1"], "x":["1","2","3","4","5"], - "type":"bar", - "uid":"aef0bf" + "type":"bar" }, { "name":"Col4", "y":["-3","0","1","0","-3"], "x":["1","2","3","4","5"], - "type":"bar", - "uid":"330b4d" + "type":"bar" } ], "layout":{ From f4c44824638ef150e066dc8b55f0f8d593a3f3f9 Mon Sep 17 00:00:00 2001 From: keeganmccallum Date: Fri, 6 May 2016 16:00:29 -0400 Subject: [PATCH 6/9] fix eslint errors --- src/traces/bar/set_positions.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/traces/bar/set_positions.js b/src/traces/bar/set_positions.js index 2ff6b8519bd..a7d8027afb1 100644 --- a/src/traces/bar/set_positions.js +++ b/src/traces/bar/set_positions.js @@ -144,7 +144,7 @@ module.exports = function setPositions(gd, plotinfo) { for(j = 0; j < ti.length; j++) { 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; var previousSum = sums[sv] || 0; if(stack || relative) ti[j].b = previousSum; barEnd = ti[j].b + ti[j].s; @@ -164,7 +164,7 @@ module.exports = function setPositions(gd, plotinfo) { if(norm) { padded = false; var top = norm==='fraction' ? 1 : 100, - isNegative = false, + relAndNegative = false, tiny = top/1e9; // in case of rounding error in sum sMin = 0; sMax = stack ? top : 0; @@ -173,9 +173,9 @@ 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 + if(relAndNegative) scale *= -1; // preserve sign if negative ti[j].b *= scale; ti[j].s *= scale; barEnd = ti[j].b + ti[j].s; From 21c2346a697056cca43d741f17158ca2be6d78b9 Mon Sep 17 00:00:00 2001 From: keeganmccallum Date: Fri, 6 May 2016 16:08:01 -0400 Subject: [PATCH 7/9] add pngs for mock tests --- .../baselines/bar_stackrelative_negative.png | Bin 0 -> 9816 bytes .../bar_stackrelativeto100_negative.png | Bin 0 -> 11311 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 test/image/baselines/bar_stackrelative_negative.png create mode 100644 test/image/baselines/bar_stackrelativeto100_negative.png diff --git a/test/image/baselines/bar_stackrelative_negative.png b/test/image/baselines/bar_stackrelative_negative.png new file mode 100644 index 0000000000000000000000000000000000000000..cb801a3ff37be5dbb7875a227874ea6969c4bfe2 GIT binary patch literal 9816 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 Date: Mon, 9 May 2016 12:23:22 -0400 Subject: [PATCH 8/9] fix image test baselines --- .../baselines/bar_stackrelative_negative.png | Bin 9816 -> 9602 bytes .../bar_stackrelativeto100_negative.png | Bin 11311 -> 11032 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/test/image/baselines/bar_stackrelative_negative.png b/test/image/baselines/bar_stackrelative_negative.png index cb801a3ff37be5dbb7875a227874ea6969c4bfe2..68090397c576f889bc47fab8c15653715fc2ff37 100644 GIT binary patch literal 9602 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 literal 11311 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 Date: Mon, 9 May 2016 15:02:04 -0400 Subject: [PATCH 9/9] remove uids from mock --- test/image/mocks/bar_stackto100_negative.json | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/test/image/mocks/bar_stackto100_negative.json b/test/image/mocks/bar_stackto100_negative.json index 2159f447b2c..e6e81b934ba 100644 --- a/test/image/mocks/bar_stackto100_negative.json +++ b/test/image/mocks/bar_stackto100_negative.json @@ -4,29 +4,25 @@ "name":"Col1", "y":["1","2","3","4","5"], "x":["1","2","3","4","5"], - "type":"bar", - "uid":"aeb9ea" + "type":"bar" }, { "name":"Col2", "y":["2","3","4","3","2"], "x":["1","2","3","4","5"], - "type":"bar", - "uid":"2f201d" + "type":"bar" }, { "name":"Col3", "y":["5","4","3","2","1"], "x":["1","2","3","4","5"], - "type":"bar", - "uid":"aef0bf" + "type":"bar" }, { "name":"Col4", "y":["-1","0","1","0","-1"], "x":["1","2","3","4","5"], - "type":"bar", - "uid":"330b4d" + "type":"bar" } ], "layout":{