|
|
|
@ -59,15 +59,14 @@ nv.models.stackedArea = function() {
|
|
|
|
|
|
|
|
|
|
var dataRaw = data;
|
|
|
|
|
// Injecting point index into each point because d3.layout.stack().out does not give index
|
|
|
|
|
data = data.map(function(aseries, i) {
|
|
|
|
|
aseries.seriesIndex = i;
|
|
|
|
|
aseries.values = aseries.values.map(function(d, j) {
|
|
|
|
|
d.index = j;
|
|
|
|
|
d.seriesIndex = i;
|
|
|
|
|
return d;
|
|
|
|
|
})
|
|
|
|
|
return aseries;
|
|
|
|
|
});
|
|
|
|
|
data.forEach(function(aseries, i) {
|
|
|
|
|
aseries.seriesIndex = i;
|
|
|
|
|
aseries.values = aseries.values.map(function(d, j) {
|
|
|
|
|
d.index = j;
|
|
|
|
|
d.seriesIndex = i;
|
|
|
|
|
return d;
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
var dataFiltered = data.filter(function(series) {
|
|
|
|
|
return !series.disabled;
|
|
|
|
@ -134,11 +133,11 @@ nv.models.stackedArea = function() {
|
|
|
|
|
|
|
|
|
|
var area = d3.svg.area()
|
|
|
|
|
.x(function(d,i) { return x(getX(d,i)) })
|
|
|
|
|
.y0(function(d) {
|
|
|
|
|
return y(d.display.y0)
|
|
|
|
|
.y0(function(d) {
|
|
|
|
|
return y(d.display.y0)
|
|
|
|
|
})
|
|
|
|
|
.y1(function(d) {
|
|
|
|
|
return y(d.display.y + d.display.y0)
|
|
|
|
|
.y1(function(d) {
|
|
|
|
|
return y(d.display.y + d.display.y0)
|
|
|
|
|
})
|
|
|
|
|
.interpolate(interpolate);
|
|
|
|
|
|
|
|
|
@ -186,13 +185,13 @@ nv.models.stackedArea = function() {
|
|
|
|
|
.attr('d', function(d,i) { return zeroArea(d.values,i) })
|
|
|
|
|
.remove();
|
|
|
|
|
path
|
|
|
|
|
.style('fill', function(d,i){
|
|
|
|
|
return d.color || color(d, d.seriesIndex)
|
|
|
|
|
.style('fill', function(d,i){
|
|
|
|
|
return d.color || color(d, d.seriesIndex)
|
|
|
|
|
})
|
|
|
|
|
.style('stroke', function(d,i){ return d.color || color(d, d.seriesIndex) });
|
|
|
|
|
path.transition()
|
|
|
|
|
.attr('d', function(d,i) {
|
|
|
|
|
return area(d.values,i)
|
|
|
|
|
.attr('d', function(d,i) {
|
|
|
|
|
return area(d.values,i)
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -211,10 +210,10 @@ nv.models.stackedArea = function() {
|
|
|
|
|
//============================================================
|
|
|
|
|
//Special offset functions
|
|
|
|
|
chart.d3_stackedOffset_stackPercent = function(stackData) {
|
|
|
|
|
var n = stackData.length, //How many series
|
|
|
|
|
var n = stackData.length, //How many series
|
|
|
|
|
m = stackData[0].length, //how many points per series
|
|
|
|
|
k = 1 / n,
|
|
|
|
|
i,
|
|
|
|
|
i,
|
|
|
|
|
j,
|
|
|
|
|
o,
|
|
|
|
|
y0 = [];
|
|
|
|
@ -224,9 +223,9 @@ nv.models.stackedArea = function() {
|
|
|
|
|
o += getY(dataRaw[i].values[j]) //total value of all points at a certian point in time.
|
|
|
|
|
|
|
|
|
|
if (o) for (i = 0; i < n; i++)
|
|
|
|
|
stackData[i][j][1] /= o;
|
|
|
|
|
else
|
|
|
|
|
for (i = 0; i < n; i++)
|
|
|
|
|
stackData[i][j][1] /= o;
|
|
|
|
|
else
|
|
|
|
|
for (i = 0; i < n; i++)
|
|
|
|
|
stackData[i][j][1] = k;
|
|
|
|
|
}
|
|
|
|
|
for (j = 0; j < m; ++j) y0[j] = 0;
|
|
|
|
@ -264,11 +263,11 @@ nv.models.stackedArea = function() {
|
|
|
|
|
chart.dispatch = dispatch;
|
|
|
|
|
chart.scatter = scatter;
|
|
|
|
|
|
|
|
|
|
d3.rebind(chart, scatter, 'interactive', 'size', 'xScale', 'yScale', 'zScale', 'xDomain', 'yDomain', 'xRange', 'yRange',
|
|
|
|
|
d3.rebind(chart, scatter, 'interactive', 'size', 'xScale', 'yScale', 'zScale', 'xDomain', 'yDomain', 'xRange', 'yRange',
|
|
|
|
|
'sizeDomain', 'forceX', 'forceY', 'forceSize', 'clipVoronoi', 'useVoronoi','clipRadius','highlightPoint','clearHighlights');
|
|
|
|
|
|
|
|
|
|
chart.options = nv.utils.optionsFunc.bind(chart);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
chart.x = function(_) {
|
|
|
|
|
if (!arguments.length) return getX;
|
|
|
|
|
getX = d3.functor(_);
|
|
|
|
|