Chart: regular area stacking (not percent) now shows both the value and sum per point.

This commit is contained in:
Alon Horev
2015-12-11 23:22:22 +02:00
parent 76a1b9fdbe
commit 24b70e66af

View File

@@ -35,9 +35,15 @@
var normalAreaStacking = function(seriesList) {
fillXValues(seriesList);
for (var i = 1; i < seriesList.length; i++) {
_.each(seriesList, function(series) {
series.text = [];
series.hoverinfo = 'text+name';
});
for (var i = 0; i < seriesList.length; i++) {
for (var j = 0; j < seriesList[i].y.length; j++) {
seriesList[i].y[j] += seriesList[i-1].y[j];
var sum = i > 0 ? seriesList[i-1].y[j] : 0;
seriesList[i].text.push('Value: ' + seriesList[i].y[j] + '<br>Sum: ' + (sum + seriesList[i].y[j]));
seriesList[i].y[j] += sum;
}
}
}
@@ -53,13 +59,13 @@
for (var i = 0; i < seriesList[0].y.length; i++) {
var sum = 0;
for(var j = 0; j < seriesList.length; j++) {
sum += seriesList[j]['y'][i];
sum += seriesList[j].y[i];
}
for(var j = 0; j < seriesList.length; j++) {
var value = seriesList[j]['y'][i] / sum * 100;
seriesList[j].text.push('Value: ' + seriesList[j]['y'][i] + '<br>Relative: ' + value.toFixed(2) + '%');
var value = seriesList[j].y[i] / sum * 100;
seriesList[j].text.push('Value: ' + seriesList[j].y[i] + '<br>Relative: ' + value.toFixed(2) + '%');
seriesList[j]['y'][i] = value;
seriesList[j].y[i] = value;
if (j > 0)
seriesList[j].y[i] += seriesList[j-1].y[i];
}
@@ -77,12 +83,12 @@
for (var i = 0; i < seriesList[0].y.length; i++) {
var sum = 0;
for(var j = 0; j < seriesList.length; j++) {
sum += seriesList[j]['y'][i];
sum += seriesList[j].y[i];
}
for(var j = 0; j < seriesList.length; j++) {
var value = seriesList[j]['y'][i] / sum * 100;
seriesList[j].text.push('Value: ' + seriesList[j]['y'][i] + '<br>Relative: ' + value.toFixed(2) + '%');
seriesList[j]['y'][i] = value;
var value = seriesList[j].y[i] / sum * 100;
seriesList[j].text.push('Value: ' + seriesList[j].y[i] + '<br>Relative: ' + value.toFixed(2) + '%');
seriesList[j].y[i] = value;
}
}
}
@@ -232,7 +238,7 @@
scope.$watch('series', redraw);
scope.$watch('options', redraw, true);
scope.layout = {margin: {l: 50, r: 50, b: 50, t: 20, pad: 4}, autosize: true};
scope.layout = {margin: {l: 50, r: 50, b: 50, t: 20, pad: 4}, autosize: true, hovermode: 'closest'};
scope.plotlyOptions = {showLink: false, displaylogo: false};
scope.data = [];
}