From: Dan Vanderkam <danvdk@gmail.com> Date: Sun, 29 Nov 2009 22:04:03 +0000 (-0500) Subject: fix rolling w/ missing data and no error bars. simplify logic X-Git-Tag: v1.0.0~864 X-Git-Url: https://adrianiainlam.tk/git/?a=commitdiff_plain;h=2847c1cf1a2874e9fe56b5749e6e105e37bb086a;p=dygraphs.git fix rolling w/ missing data and no error bars. simplify logic --- diff --git a/dygraph-combined.js b/dygraph-combined.js index 0768e24..5716ace 100644 --- a/dygraph-combined.js +++ b/dygraph-combined.js @@ -5570,57 +5570,40 @@ if(!this.attr_("errorBars")){ if(_193==1){ return _192; } -for(var i=0;i<_206;i++){ -var sum=0; -for(var j=0;j<i+1;j++){ -sum+=_192[j][1]; -} -_194[i]=[_192[i][0],sum/(i+1)]; -} -for(var i=Math.min(_193-1,_192.length-2);i<_192.length;i++){ -var sum=0; -for(var j=i-_193+1;j<i+1;j++){ -sum+=_192[j][1]; -} -_194[i]=[_192[i][0],sum/_193]; -} -}else{ -for(var i=0;i<_206;i++){ +for(var i=0;i<_192.length;i++){ var sum=0; var _208=0; -var _209=0; -for(var j=0;j<i+1;j++){ -var y=_192[j][1][0]; +for(var j=Math.max(0,i-_193+1);j<i+1;j++){ +var y=_192[j][1]; if(!y||isNaN(y)){ continue; } -_209++; -sum+=y; -_208+=Math.pow(_192[j][1][1],2); +_208++; +sum+=_192[j][1]; } -if(_209){ -var _202=Math.sqrt(_208)/_209; -_194[i]=[_192[i][0],[sum/_209,_195*_202,_195*_202]]; +if(_208){ +_194[i]=[_192[i][0],sum/_208]; }else{ -_194[i]=[_192[i][0],[null,null,null]]; +_194[i]=[_192[i][0],null]; } } -for(var i=Math.min(_193-1,_192.length-2);i<_192.length;i++){ +}else{ +for(var i=0;i<_192.length;i++){ var sum=0; -var _208=0; var _209=0; -for(var j=i-_193+1;j<i+1;j++){ +var _208=0; +for(var j=Math.max(0,i-_193+1);j<i+1;j++){ var y=_192[j][1][0]; if(!y||isNaN(y)){ continue; } -_209++; +_208++; sum+=_192[j][1][0]; -_208+=Math.pow(_192[j][1][1],2); +_209+=Math.pow(_192[j][1][1],2); } -if(_209){ -var _202=Math.sqrt(_208)/_209; -_194[i]=[_192[i][0],[sum/_209,_195*_202,_195*_202]]; +if(_208){ +var _202=Math.sqrt(_209)/_208; +_194[i]=[_192[i][0],[sum/_208,_195*_202,_195*_202]]; }else{ _194[i]=[_192[i][0],[null,null,null]]; } diff --git a/dygraph.js b/dygraph.js index fd8a41d..c893e02 100644 --- a/dygraph.js +++ b/dygraph.js @@ -1176,49 +1176,28 @@ Dygraph.prototype.rollingAverage = function(originalData, rollPeriod) { return originalData; } - for (var i = 0; i < num_init_points; i++) { + for (var i = 0; i < originalData.length; i++) { var sum = 0; - for (var j = 0; j < i + 1; j++) - sum += originalData[j][1]; - rollingData[i] = [originalData[i][0], sum / (i + 1)]; - } - // Calculate the rolling average for the remaining points - for (var i = Math.min(rollPeriod - 1, originalData.length - 2); - i < originalData.length; - i++) { - var sum = 0; - for (var j = i - rollPeriod + 1; j < i + 1; j++) - sum += originalData[j][1]; - rollingData[i] = [originalData[i][0], sum / rollPeriod]; - } - } else { - for (var i = 0; i < num_init_points; i++) { - var sum = 0; - var variance = 0; var num_ok = 0; - for (var j = 0; j < i + 1; j++) { - var y = originalData[j][1][0]; + for (var j = Math.max(0, i - rollPeriod + 1); j < i + 1; j++) { + var y = originalData[j][1]; if (!y || isNaN(y)) continue; num_ok++; - sum += y; - variance += Math.pow(originalData[j][1][1], 2); + sum += originalData[j][1]; } if (num_ok) { - var stddev = Math.sqrt(variance)/num_ok; - rollingData[i] = [originalData[i][0], - [sum/num_ok, sigma * stddev, sigma * stddev]]; + rollingData[i] = [originalData[i][0], sum / num_ok]; } else { - rollingData[i] = [originalData[i][0], [null, null, null]]; + rollingData[i] = [originalData[i][0], null]; } } - // Calculate the rolling average for the remaining points - for (var i = Math.min(rollPeriod - 1, originalData.length - 2); - i < originalData.length; - i++) { + + } else { + for (var i = 0; i < originalData.length; i++) { var sum = 0; var variance = 0; var num_ok = 0; - for (var j = i - rollPeriod + 1; j < i + 1; j++) { + for (var j = Math.max(0, i - rollPeriod + 1); j < i + 1; j++) { var y = originalData[j][1][0]; if (!y || isNaN(y)) continue; num_ok++; diff --git a/tests/missing-data.html b/tests/missing-data.html index 7edaf0f..6d363fa 100644 --- a/tests/missing-data.html +++ b/tests/missing-data.html @@ -44,7 +44,10 @@ [ new Date("2009/12/06"), 18, 15], [ new Date("2009/12/07"), 12, 16] ], - { labels: ["Date","GapSeries1","GapSeries2"] } + { + labels: ["Date","GapSeries1","GapSeries2"], + showRoller: true + } ); new Dygraph(