|
12 | 12 | chartRangeClip = options.get('chartRangeClip'), |
13 | 13 | stackMin = Infinity, |
14 | 14 | stackMax = -Infinity, |
15 | | - isStackString, groupMin, groupMax, stackRanges, |
| 15 | + isStackString, groupMin, groupMax, stackRanges, stackRangesNeg, stackTotals, actualMin, actualMax, |
16 | 16 | numValues, i, vlen, range, zeroAxis, xaxisOffset, min, max, clipMin, clipMax, |
17 | 17 | stacked, vlist, j, slen, svals, val, yoffset, yMaxCalc, canvasHeightEf; |
18 | 18 | bar._super.init.call(this, el, values, options, width, height); |
|
51 | 51 | clipMin = chartRangeMin === undefined ? -Infinity : chartRangeMin; |
52 | 52 | clipMax = chartRangeMax === undefined ? Infinity : chartRangeMax; |
53 | 53 | } |
| 54 | + if (stacked) { |
| 55 | + actualMin = chartRangeMin === undefined ? stackMin : Math.min(stackMin, chartRangeMin); |
| 56 | + actualMax = chartRangeMax === undefined ? stackMax : Math.max(stackMax, chartRangeMax); |
| 57 | + } |
54 | 58 |
|
55 | 59 | numValues = []; |
56 | 60 | stackRanges = stacked ? [] : numValues; |
57 | | - var stackTotals = []; |
58 | | - var stackRangesNeg = []; |
59 | | - for (i = 0, vlen = values.length; i < vlen; i++) { |
| 61 | + stackTotals = []; |
| 62 | + stackRangesNeg = []; |
| 63 | + for (i = 0, vlen = values.length; i < vlen; i++) { |
60 | 64 | if (stacked) { |
61 | 65 | vlist = values[i]; |
62 | 66 | values[i] = svals = []; |
|
76 | 80 | stackRanges[i] += val; |
77 | 81 | } |
78 | 82 | } else { |
79 | | - stackRanges[i] += Math.abs(val - (val < 0 ? stackMax : stackMin)); |
| 83 | + stackRanges[i] += Math.abs(val - (val < 0 ? actualMax : actualMin)); |
80 | 84 | } |
81 | 85 | numValues.push(val); |
82 | 86 | stacksInThisOffset++; |
83 | 87 | } |
84 | | - } |
| 88 | + } |
85 | 89 | } else { |
86 | 90 | val = chartRangeClip ? clipval(values[i], clipMin, clipMax) : values[i]; |
87 | 91 | val = values[i] = normalizeValue(val); |
|
91 | 95 | } |
92 | 96 | } |
93 | 97 |
|
94 | | - this.max = max = Math.max.apply(Math, numValues); |
95 | | - this.min = min = Math.min.apply(Math, numValues); |
96 | | - this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max; |
97 | | - this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min; |
| 98 | + this.max = max = Math.max.apply(Math, numValues); |
| 99 | + this.min = min = Math.min.apply(Math, numValues); |
| 100 | + this.stackMax = stackMax = stacked ? Math.max.apply(Math, stackTotals) : max; |
| 101 | + this.stackMin = stackMin = stacked ? Math.min.apply(Math, numValues) : min; |
98 | 102 | // this.stackRanges = stackRanges; |
99 | 103 | this.stackTotals = stackTotals; |
100 | 104 |
|
101 | | - if (options.get('chartRangeMin') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMin') < min)) { |
102 | | - min = options.get('chartRangeMin'); |
| 105 | + if (chartRangeMin !== undefined && (chartRangeClip || chartRangeMin < min)) { |
| 106 | + min = chartRangeMin; |
103 | 107 | } |
104 | | - if (options.get('chartRangeMax') !== undefined && (options.get('chartRangeClip') || options.get('chartRangeMax') > max)) { |
105 | | - max = options.get('chartRangeMax'); |
| 108 | + if (chartRangeMax !== undefined && (chartRangeClip || chartRangeMax > max)) { |
| 109 | + max = chartRangeMax; |
106 | 110 | } |
107 | 111 |
|
108 | 112 | this.zeroAxis = zeroAxis = options.get('zeroAxis', true); |
|
120 | 124 | if (zeroAxis) { |
121 | 125 | range = stacked ? stackMax : max; |
122 | 126 | } else { |
123 | | - range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min; |
| 127 | + range = stacked ? (Math.max.apply(Math, stackRanges) + Math.max.apply(Math, stackRangesNeg)) : max - min; |
124 | 128 | } |
125 | 129 | // as we plot zero/min values a single pixel line, we add a pixel to all other |
126 | 130 | // values - Reduce the effective canvas size to suit |
|
236 | 240 | } |
237 | 241 |
|
238 | 242 | if (allMin && minPlotted) { |
239 | | - continue; |
240 | | - } |
| 243 | + continue; |
| 244 | + } |
241 | 245 |
|
242 | 246 | if (stacked && val === stackTotals[valuenum]) { |
243 | 247 | minPlotted = true; |
|
249 | 253 | if (range > 0) { |
250 | 254 | if (range - reserve == 1) { |
251 | 255 | height = (canvasHeightEf * (Math.abs( ( val / stackTotals[valuenum] )))) + 1; |
252 | | - } else { |
| 256 | + } else { |
253 | 257 | height = ((canvasHeightEf / (range - reserve) ) * (val - xaxisOffset)); |
254 | | - } |
| 258 | + } |
255 | 259 | } else { |
256 | 260 | // range is 0 - all values are the same. |
257 | 261 | height = Math.ceil(canvasHeightEf / (valcount || 1) ); |
|
0 commit comments