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(