Put zero values at zero.
Mike Bostock
4 years ago
1133 | 1133 | |
1134 | 1134 | <a name="stackOffsetDiverging" href="#stackOffsetDiverging">#</a> d3.<b>stackOffsetDiverging</b>(<i>series</i>, <i>order</i>) · [Source](https://github.com/d3/d3-shape/blob/master/src/offset/diverging.js) |
1135 | 1135 | |
1136 | Positive values are stacked above zero, while negative values are [stacked below zero](https://bl.ocks.org/mbostock/b5935342c6d21928111928401e2c8608). | |
1136 | Positive values are stacked above zero, negative values are [stacked below zero](https://bl.ocks.org/mbostock/b5935342c6d21928111928401e2c8608), and zero values are stacked at zero. | |
1137 | 1137 | |
1138 | 1138 | <a name="stackOffsetNone" href="#stackOffsetNone">#</a> d3.<b>stackOffsetNone</b>(<i>series</i>, <i>order</i>) · [Source](https://github.com/d3/d3-shape/blob/master/src/offset/none.js) |
1139 | 1139 |
1 | 1 | if (!((n = series.length) > 0)) return; |
2 | 2 | for (var i, j = 0, d, dy, yp, yn, n, m = series[order[0]].length; j < m; ++j) { |
3 | 3 | for (yp = yn = 0, i = 0; i < n; ++i) { |
4 | if ((dy = (d = series[order[i]][j])[1] - d[0]) >= 0) { | |
4 | if ((dy = (d = series[order[i]][j])[1] - d[0]) > 0) { | |
5 | 5 | d[0] = yp, d[1] = yp += dy; |
6 | 6 | } else if (dy < 0) { |
7 | 7 | d[1] = yn, d[0] = yn += dy; |
8 | 8 | } else { |
9 | d[0] = yp; | |
9 | d[0] = 0, d[1] = dy; | |
10 | 10 | } |
11 | 11 | } |
12 | 12 | } |
15 | 15 | test.end(); |
16 | 16 | }); |
17 | 17 | |
18 | tape.only("stackOffsetDiverging(series, order) handles a single series", function(test) { | |
18 | tape("stackOffsetDiverging(series, order) handles a single series", function(test) { | |
19 | 19 | var series = [ |
20 | 20 | [[1, 2], [2, 4], [3, 4]] |
21 | 21 | ]; |
37 | 37 | series[1][1][1] = "NaN"; // can’t test.equal NaN |
38 | 38 | test.deepEqual(series, [ |
39 | 39 | [[0, 1], [0, 2], [0, 1]], |
40 | [[1, 4], [2, "NaN"], [1, 3]], | |
40 | [[1, 4], [0, "NaN"], [1, 3]], | |
41 | 41 | [[4, 9], [2, 4], [3, 7]] |
42 | 42 | ]); |
43 | 43 | test.end(); |
72 | 72 | ]); |
73 | 73 | test.end(); |
74 | 74 | }); |
75 | ||
76 | tape("stackOffsetDiverging(series, order) puts zero values at zero, in order", function(test) { | |
77 | var series = [ | |
78 | [[0, 1], [0, 2], [0, -1]], | |
79 | [[0, 3], [0, 0], [0, 0]], | |
80 | [[0, 5], [0, 2], [0, 4]] | |
81 | ]; | |
82 | shape.stackOffsetDiverging(series, shape.stackOrderNone(series)); | |
83 | test.deepEqual(series, [ | |
84 | [[0, 1], [0, 2], [-1, 0]], | |
85 | [[1, 4], [0, 0], [0, 0]], | |
86 | [[4, 9], [2, 4], [0, 4]] | |
87 | ]); | |
88 | test.end(); | |
89 | }); |