fix rolling w/ missing data and no error bars. simplify logic
authorDan Vanderkam <danvdk@gmail.com>
Sun, 29 Nov 2009 22:04:03 +0000 (17:04 -0500)
committerDan Vanderkam <danvdk@gmail.com>
Sun, 29 Nov 2009 22:04:03 +0000 (17:04 -0500)
dygraph-combined.js
dygraph.js
tests/missing-data.html

index 0768e24..5716ace 100644 (file)
@@ -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]];
 }
index fd8a41d..c893e02 100644 (file)
@@ -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++;
index 7edaf0f..6d363fa 100644 (file)
         [ 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(