@qogni/dygraphs
Version:
dygraphs is a fast, flexible open source JavaScript charting library.
101 lines (95 loc) • 12.9 kB
JavaScript
/**
* @license
* Copyright 2013 David Eberlein (david.eberlein@ch.sauter-bc.com)
* MIT-licenced: https://opensource.org/licenses/MIT
*/
/**
* @fileoverview DataHandler implementation for the errorBars option.
* @author David Eberlein (david.eberlein@ch.sauter-bc.com)
*/
/*global Dygraph:false */
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _bars = _interopRequireDefault(require("./bars"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
/**
* @constructor
* @extends BarsHandler
*/
var ErrorBarsHandler = function ErrorBarsHandler() {};
ErrorBarsHandler.prototype = new _bars["default"]();
/** @inheritDoc */
ErrorBarsHandler.prototype.extractSeries = function (rawData, i, options) {
// TODO(danvk): pre-allocate series here.
var series = [];
var x, y, variance, point;
var seriesLabel = options.get("labels")[i];
var logScale = options.getForSeries("logscale", seriesLabel);
var sigma = options.getForSeries("sigma", seriesLabel);
for (var j = 0; j < rawData.length; j++) {
x = rawData[j][0];
point = rawData[j][i];
if (logScale && point !== null) {
// On the log scale, points less than zero do not exist.
// This will create a gap in the chart.
if (point[0] <= 0 || point[0] - sigma * point[1] <= 0) {
point = null;
}
}
// Extract to the unified data format.
if (point !== null) {
y = point[0];
if (y !== null && !isNaN(y)) {
variance = sigma * point[1];
// preserve original error value in extras for further
// filtering
series.push([x, y, [y - variance, y + variance, point[1]]]);
} else {
series.push([x, y, [y, y, y]]);
}
} else {
series.push([x, null, [null, null, null]]);
}
}
return series;
};
/** @inheritDoc */
ErrorBarsHandler.prototype.rollingAverage = function (originalData, rollPeriod, options, i) {
rollPeriod = Math.min(rollPeriod, originalData.length);
var rollingData = [];
var seriesLabel = options.get("labels")[i];
var sigma = options.getForSeries("sigma", seriesLabel);
var i, j, y, v, sum, num_ok, stddev, variance, value;
// Calculate the rolling average for the first rollPeriod - 1 points
// where there is not enough data to roll over the full number of points
for (i = 0; i < originalData.length; i++) {
sum = 0;
variance = 0;
num_ok = 0;
for (j = Math.max(0, i - rollPeriod + 1); j < i + 1; j++) {
y = originalData[j][1];
if (y === null || isNaN(y)) continue;
num_ok++;
sum += y;
variance += Math.pow(originalData[j][2][2], 2);
}
if (num_ok) {
stddev = Math.sqrt(variance) / num_ok;
value = sum / num_ok;
rollingData[i] = [originalData[i][0], value, [value - sigma * stddev, value + sigma * stddev]];
} else {
// This explicitly preserves NaNs to aid with "independent
// series".
// See testRollingAveragePreservesNaNs.
v = rollPeriod == 1 ? originalData[i][1] : null;
rollingData[i] = [originalData[i][0], v, [v, v]];
}
}
return rollingData;
};
var _default = exports["default"] = ErrorBarsHandler;
module.exports = exports.default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJ2YWx1ZSIsIl9iYXJzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsIkVycm9yQmFyc0hhbmRsZXIiLCJwcm90b3R5cGUiLCJCYXJzSGFuZGxlciIsImV4dHJhY3RTZXJpZXMiLCJyYXdEYXRhIiwiaSIsIm9wdGlvbnMiLCJzZXJpZXMiLCJ4IiwieSIsInZhcmlhbmNlIiwicG9pbnQiLCJzZXJpZXNMYWJlbCIsImdldCIsImxvZ1NjYWxlIiwiZ2V0Rm9yU2VyaWVzIiwic2lnbWEiLCJqIiwibGVuZ3RoIiwiaXNOYU4iLCJwdXNoIiwicm9sbGluZ0F2ZXJhZ2UiLCJvcmlnaW5hbERhdGEiLCJyb2xsUGVyaW9kIiwiTWF0aCIsIm1pbiIsInJvbGxpbmdEYXRhIiwidiIsInN1bSIsIm51bV9vayIsInN0ZGRldiIsIm1heCIsInBvdyIsInNxcnQiLCJfZGVmYXVsdCIsIm1vZHVsZSIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvZGF0YWhhbmRsZXIvYmFycy1lcnJvci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxMyBEYXZpZCBFYmVybGVpbiAoZGF2aWQuZWJlcmxlaW5AY2guc2F1dGVyLWJjLmNvbSlcbiAqIE1JVC1saWNlbmNlZDogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqL1xuXG4vKipcbiAqIEBmaWxlb3ZlcnZpZXcgRGF0YUhhbmRsZXIgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBlcnJvckJhcnMgb3B0aW9uLlxuICogQGF1dGhvciBEYXZpZCBFYmVybGVpbiAoZGF2aWQuZWJlcmxlaW5AY2guc2F1dGVyLWJjLmNvbSlcbiAqL1xuXG4vKmdsb2JhbCBEeWdyYXBoOmZhbHNlICovXG5cInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IEJhcnNIYW5kbGVyIGZyb20gJy4vYmFycyc7XG5cbi8qKlxuICogQGNvbnN0cnVjdG9yXG4gKiBAZXh0ZW5kcyBCYXJzSGFuZGxlclxuICovXG52YXIgRXJyb3JCYXJzSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xufTtcblxuRXJyb3JCYXJzSGFuZGxlci5wcm90b3R5cGUgPSBuZXcgQmFyc0hhbmRsZXIoKTtcblxuLyoqIEBpbmhlcml0RG9jICovXG5FcnJvckJhcnNIYW5kbGVyLnByb3RvdHlwZS5leHRyYWN0U2VyaWVzID0gZnVuY3Rpb24ocmF3RGF0YSwgaSwgb3B0aW9ucykge1xuICAvLyBUT0RPKGRhbnZrKTogcHJlLWFsbG9jYXRlIHNlcmllcyBoZXJlLlxuICB2YXIgc2VyaWVzID0gW107XG4gIHZhciB4LCB5LCB2YXJpYW5jZSwgcG9pbnQ7XG4gIGNvbnN0IHNlcmllc0xhYmVsID0gb3B0aW9ucy5nZXQoXCJsYWJlbHNcIilbaV07XG4gIGNvbnN0IGxvZ1NjYWxlID0gb3B0aW9ucy5nZXRGb3JTZXJpZXMoXCJsb2dzY2FsZVwiLCBzZXJpZXNMYWJlbCk7XG4gIGNvbnN0IHNpZ21hID0gb3B0aW9ucy5nZXRGb3JTZXJpZXMoXCJzaWdtYVwiLCBzZXJpZXNMYWJlbCk7XG4gIGZvciAoIHZhciBqID0gMDsgaiA8IHJhd0RhdGEubGVuZ3RoOyBqKyspIHtcbiAgICB4ID0gcmF3RGF0YVtqXVswXTtcbiAgICBwb2ludCA9IHJhd0RhdGFbal1baV07XG4gICAgaWYgKGxvZ1NjYWxlICYmIHBvaW50ICE9PSBudWxsKSB7XG4gICAgICAvLyBPbiB0aGUgbG9nIHNjYWxlLCBwb2ludHMgbGVzcyB0aGFuIHplcm8gZG8gbm90IGV4aXN0LlxuICAgICAgLy8gVGhpcyB3aWxsIGNyZWF0ZSBhIGdhcCBpbiB0aGUgY2hhcnQuXG4gICAgICBpZiAocG9pbnRbMF0gPD0gMCB8fCBwb2ludFswXSAtIHNpZ21hICogcG9pbnRbMV0gPD0gMCkge1xuICAgICAgICBwb2ludCA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIEV4dHJhY3QgdG8gdGhlIHVuaWZpZWQgZGF0YSBmb3JtYXQuXG4gICAgaWYgKHBvaW50ICE9PSBudWxsKSB7XG4gICAgICB5ID0gcG9pbnRbMF07XG4gICAgICBpZiAoeSAhPT0gbnVsbCAmJiAhaXNOYU4oeSkpIHtcbiAgICAgICAgdmFyaWFuY2UgPSBzaWdtYSAqIHBvaW50WzFdO1xuICAgICAgICAvLyBwcmVzZXJ2ZSBvcmlnaW5hbCBlcnJvciB2YWx1ZSBpbiBleHRyYXMgZm9yIGZ1cnRoZXJcbiAgICAgICAgLy8gZmlsdGVyaW5nXG4gICAgICAgIHNlcmllcy5wdXNoKFsgeCwgeSwgWyB5IC0gdmFyaWFuY2UsIHkgKyB2YXJpYW5jZSwgcG9pbnRbMV0gXSBdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlcmllcy5wdXNoKFsgeCwgeSwgWyB5LCB5LCB5IF0gXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlcmllcy5wdXNoKFsgeCwgbnVsbCwgWyBudWxsLCBudWxsLCBudWxsIF0gXSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzZXJpZXM7XG59O1xuXG4vKiogQGluaGVyaXREb2MgKi9cbkVycm9yQmFyc0hhbmRsZXIucHJvdG90eXBlLnJvbGxpbmdBdmVyYWdlID1cbiAgICBmdW5jdGlvbihvcmlnaW5hbERhdGEsIHJvbGxQZXJpb2QsIG9wdGlvbnMsIGkpIHtcbiAgcm9sbFBlcmlvZCA9IE1hdGgubWluKHJvbGxQZXJpb2QsIG9yaWdpbmFsRGF0YS5sZW5ndGgpO1xuICB2YXIgcm9sbGluZ0RhdGEgPSBbXTtcbiAgY29uc3Qgc2VyaWVzTGFiZWwgPSBvcHRpb25zLmdldChcImxhYmVsc1wiKVtpXTtcbiAgY29uc3Qgc2lnbWEgPSBvcHRpb25zLmdldEZvclNlcmllcyhcInNpZ21hXCIsIHNlcmllc0xhYmVsKTtcblxuICB2YXIgaSwgaiwgeSwgdiwgc3VtLCBudW1fb2ssIHN0ZGRldiwgdmFyaWFuY2UsIHZhbHVlO1xuXG4gIC8vIENhbGN1bGF0ZSB0aGUgcm9sbGluZyBhdmVyYWdlIGZvciB0aGUgZmlyc3Qgcm9sbFBlcmlvZCAtIDEgcG9pbnRzXG4gIC8vIHdoZXJlIHRoZXJlIGlzIG5vdCBlbm91Z2ggZGF0YSB0byByb2xsIG92ZXIgdGhlIGZ1bGwgbnVtYmVyIG9mIHBvaW50c1xuICBmb3IgKGkgPSAwOyBpIDwgb3JpZ2luYWxEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgc3VtID0gMDtcbiAgICB2YXJpYW5jZSA9IDA7XG4gICAgbnVtX29rID0gMDtcbiAgICBmb3IgKGogPSBNYXRoLm1heCgwLCBpIC0gcm9sbFBlcmlvZCArIDEpOyBqIDwgaSArIDE7IGorKykge1xuICAgICAgeSA9IG9yaWdpbmFsRGF0YVtqXVsxXTtcbiAgICAgIGlmICh5ID09PSBudWxsIHx8IGlzTmFOKHkpKVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIG51bV9vaysrO1xuICAgICAgc3VtICs9IHk7XG4gICAgICB2YXJpYW5jZSArPSBNYXRoLnBvdyhvcmlnaW5hbERhdGFbal1bMl1bMl0sIDIpO1xuICAgIH1cbiAgICBpZiAobnVtX29rKSB7XG4gICAgICBzdGRkZXYgPSBNYXRoLnNxcnQodmFyaWFuY2UpIC8gbnVtX29rO1xuICAgICAgdmFsdWUgPSBzdW0gLyBudW1fb2s7XG4gICAgICByb2xsaW5nRGF0YVtpXSA9IFsgb3JpZ2luYWxEYXRhW2ldWzBdLCB2YWx1ZSxcbiAgICAgICAgICBbdmFsdWUgLSBzaWdtYSAqIHN0ZGRldiwgdmFsdWUgKyBzaWdtYSAqIHN0ZGRldl0gXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBleHBsaWNpdGx5IHByZXNlcnZlcyBOYU5zIHRvIGFpZCB3aXRoIFwiaW5kZXBlbmRlbnRcbiAgICAgIC8vIHNlcmllc1wiLlxuICAgICAgLy8gU2VlIHRlc3RSb2xsaW5nQXZlcmFnZVByZXNlcnZlc05hTnMuXG4gICAgICB2ID0gKHJvbGxQZXJpb2QgPT0gMSkgPyBvcmlnaW5hbERhdGFbaV1bMV0gOiBudWxsO1xuICAgICAgcm9sbGluZ0RhdGFbaV0gPSBbIG9yaWdpbmFsRGF0YVtpXVswXSwgdiwgWyB2LCB2IF0gXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcm9sbGluZ0RhdGE7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBFcnJvckJhcnNIYW5kbGVyO1xuIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsWUFBWTs7QUFBQ0EsTUFBQSxDQUFBQyxjQUFBLENBQUFDLE9BQUE7RUFBQUMsS0FBQTtBQUFBO0FBQUFELE9BQUE7QUFFYixJQUFBRSxLQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBaUMsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxnQkFBQUEsQ0FBQTtBQUVqQztBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQUlFLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBZ0JBLENBQUEsRUFBYyxDQUNsQyxDQUFDO0FBRURBLGdCQUFnQixDQUFDQyxTQUFTLEdBQUcsSUFBSUMsZ0JBQVcsQ0FBQyxDQUFDOztBQUU5QztBQUNBRixnQkFBZ0IsQ0FBQ0MsU0FBUyxDQUFDRSxhQUFhLEdBQUcsVUFBU0MsT0FBTyxFQUFFQyxDQUFDLEVBQUVDLE9BQU8sRUFBRTtFQUN2RTtFQUNBLElBQUlDLE1BQU0sR0FBRyxFQUFFO0VBQ2YsSUFBSUMsQ0FBQyxFQUFFQyxDQUFDLEVBQUVDLFFBQVEsRUFBRUMsS0FBSztFQUN6QixJQUFNQyxXQUFXLEdBQUdOLE9BQU8sQ0FBQ08sR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDUixDQUFDLENBQUM7RUFDNUMsSUFBTVMsUUFBUSxHQUFHUixPQUFPLENBQUNTLFlBQVksQ0FBQyxVQUFVLEVBQUVILFdBQVcsQ0FBQztFQUM5RCxJQUFNSSxLQUFLLEdBQUdWLE9BQU8sQ0FBQ1MsWUFBWSxDQUFDLE9BQU8sRUFBRUgsV0FBVyxDQUFDO0VBQ3hELEtBQU0sSUFBSUssQ0FBQyxHQUFH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