Improve findMinMax for stacked charts

parent 2f1e1ced
...@@ -396,6 +396,11 @@ c3_chart_internal_fn.tuneAxis = function(sync, callback){ ...@@ -396,6 +396,11 @@ c3_chart_internal_fn.tuneAxis = function(sync, callback){
sizesX = $$.getAbscissa($$.config.ed3Type, minmax.minX, minmax.maxX); sizesX = $$.getAbscissa($$.config.ed3Type, minmax.minX, minmax.maxX);
} }
var sizesY = $$.getAxisData(minmax.minY, minmax.maxY); var sizesY = $$.getAxisData(minmax.minY, minmax.maxY);
if($$.config.normalized){
sizesY.max = Math.min(sizesY.max, 1);
sizesY.min = Math.max(sizesY.min, -1);
}
$$.api.axis.range({ $$.api.axis.range({
min: { min: {
...@@ -423,7 +428,10 @@ c3_chart_internal_fn.tuneAxis = function(sync, callback){ ...@@ -423,7 +428,10 @@ c3_chart_internal_fn.tuneAxis = function(sync, callback){
c3_chart_internal_fn.findMinMax = function () { c3_chart_internal_fn.findMinMax = function () {
var $$ = this; var $$ = this;
var minY, maxY, minX, maxX; var minY = Infinity,
maxY = -Infinity,
minX = Infinity,
maxX = -Infinity;
var i,j, id; var i,j, id;
var stacked; var stacked;
...@@ -440,6 +448,11 @@ c3_chart_internal_fn.findMinMax = function () { ...@@ -440,6 +448,11 @@ c3_chart_internal_fn.findMinMax = function () {
}); });
} }
// For stacked bar(different algorithm)
var stackedBarSumUp = [];
var stackedBarSumDown = [];
// For all other charts
var stackedSum = []; var stackedSum = [];
var allData = $$.api.data(); var allData = $$.api.data();
...@@ -450,33 +463,45 @@ c3_chart_internal_fn.findMinMax = function () { ...@@ -450,33 +463,45 @@ c3_chart_internal_fn.findMinMax = function () {
// calc min/max for X axis // calc min/max for X axis
for(i = 0; i < data.length; i++) { for(i = 0; i < data.length; i++) {
if (isUndefined(maxX) || data[i].x > maxX) minX = Math.min(minX, data[i].x);
maxX = data[i].x; maxX = Math.max(maxX, data[i].x);
if (isUndefined(minX) || data[i].x < minX)
minX = data[i].x;
} }
// calc min/max for Y axis // calc min/max for Y axis
for(i = 0; i < data.length; i++) { for(i = 0; i < data.length; i++) {
if (isUndefined(maxY) || data[i].value > maxY)
maxY = data[i].value;
if (isUndefined(minY) || data[i].value < minY)
minY = data[i].value;
// calc sum row for stacked // calc sum row for stacked
if (stacked) { if (stacked) {
if (!stackedSum[i]) if (stackedSum[i] === undefined){
stackedSum[i] = 0; stackedSum[i] = 0;
stackedSum[i] += data[i].value; stackedBarSumUp[i] = 0;
stackedBarSumDown[i] = 0;
}
// Stacked algorithm differs for bar and other charts
if ($$.isBarType(v)){
stackedBarSumUp[i] += Math.max(0, data[i].value);
stackedBarSumDown[i] += Math.min(0, data[i].value);
} else {
stackedSum[i] += data[i].value;
minY = Math.min(minY, stackedSum[i]);
maxY = Math.max(maxY, stackedSum[i]);
}
} else {
minY = Math.min(minY, data[i].value);
maxY = Math.max(maxY, data[i].value);
} }
} }
}); });
if (stacked) { if (stacked) {
for(i = 0; i < stackedSum.length; i++) { for(i = 0; i < stackedSum.length; i++) {
if (isUndefined(maxY) || stackedSum[i] > maxY) minY = Math.min(
maxY = stackedSum[i]; minY, stackedSum[i],
if (isUndefined(minY) || stackedSum[i] < minY) stackedBarSumDown[i], stackedBarSumUp[i]
minY = stackedSum[i]; );
maxY = Math.max(
maxY, stackedSum[i],
stackedBarSumDown[i], stackedBarSumUp[i]
);
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment