X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=dygraph-layout.js;h=552911e3a0f892e43e5fa118a7c715e22a2fa5b5;hb=5605628cc2f2ca8d4f3b297a3d15dbded2c07f1e;hp=e30c7a12f011b5007fa0b8b38b23a11fe99cf69c;hpb=1a7fbe3b8e7fd316688add664c02d3eb5234c7aa;p=dygraphs.git diff --git a/dygraph-layout.js b/dygraph-layout.js index e30c7a1..552911e 100644 --- a/dygraph-layout.js +++ b/dygraph-layout.js @@ -211,6 +211,10 @@ DygraphLayout.prototype._evaluateLineCharts = function() { // on chrome+linux, they are 6 times more expensive than iterating through the // points and drawing the lines. The brunt of the cost comes from allocating // the |point| structures. + var boundaryIdStart = 0; + if (this.dygraph_.boundaryIds_.length > 0) { + boundaryIdStart = this.dygraph_.boundaryIds_[this.dygraph_.boundaryIds_.length-1][0] + } for (var setIdx = 0; setIdx < this.datasets.length; setIdx++) { var dataset = this.datasets[setIdx]; var setName = this.setNames[setIdx]; @@ -242,7 +246,8 @@ DygraphLayout.prototype._evaluateLineCharts = function() { y: yNormal, xval: xValue, yval: yValue, - name: setName // TODO(danvk): is this really necessary? + name: setName, // TODO(danvk): is this really necessary? + idx: j + boundaryIdStart }; } @@ -381,7 +386,7 @@ DygraphLayout.prototype.removeAllDatasets = function() { DygraphLayout.prototype.unstackPointAtIndex = function(setIdx, row) { var point = this.points[setIdx][row]; // If the point is missing, no unstacking is necessary - if (!point.yval) { + if (!Dygraph.isValidPoint(point)) { return point; } @@ -397,15 +402,15 @@ DygraphLayout.prototype.unstackPointAtIndex = function(setIdx, row) { // The unstacked yval is equal to the current yval minus the yval of the // next point at the same xval. - if (setIdx == this.points.length - 1) { - // We're the last series, so no unstacking is necessary. - return unstackedPoint; - } - - var points = this.points[setIdx + 1]; - if (points[row].xval == point.xval && // should always be true? - points[row].yval) { - unstackedPoint.yval -= points[row].yval; + // We need to iterate over setIdx just in case some series have invalid values + // at current row + for(setIdx++; setIdx < this.points.length; setIdx++) { + var nextPoint = this.points[setIdx][row]; + if (nextPoint.xval == point.xval && // should always be true? + Dygraph.isValidPoint(nextPoint)) { + unstackedPoint.yval -= nextPoint.yval; + break; // stop at first valid point + } } return unstackedPoint;