X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=dygraph-layout.js;h=ef1df916ff2154a17ac553c67b2dc19b935cf318;hb=b1e9e2e03dbccf94fff08ab37dc6e8c64c75736d;hp=4caa935e167b5c64e55fe7f73b9a965aa84d06f5;hpb=192d58e7c9fab1ae32da4a2dac723955f1639a54;p=dygraphs.git diff --git a/dygraph-layout.js b/dygraph-layout.js index 4caa935..ef1df91 100644 --- a/dygraph-layout.js +++ b/dygraph-layout.js @@ -9,7 +9,8 @@ * dygraphs. */ -/*jshint globalstrict: true */ +var DygraphLayout = (function() { + /*global Dygraph:false */ "use strict"; @@ -149,13 +150,13 @@ DygraphLayout.prototype.setAnnotations = function(ann) { for (var i = 0; i < ann.length; i++) { var a = {}; if (!ann[i].xval && ann[i].x === undefined) { - Dygraph.error("Annotations must have an 'x' property"); + console.error("Annotations must have an 'x' property"); return; } if (ann[i].icon && !(ann[i].hasOwnProperty('width') && ann[i].hasOwnProperty('height'))) { - Dygraph.error("Must set width and height when setting " + + console.error("Must set width and height when setting " + "annotation.icon property"); return; } @@ -175,6 +176,7 @@ DygraphLayout.prototype.setYAxes = function (yAxes) { }; DygraphLayout.prototype.evaluate = function() { + this._xAxis = {}; this._evaluateLimits(); this._evaluateLineCharts(); this._evaluateLineTicks(); @@ -183,11 +185,15 @@ DygraphLayout.prototype.evaluate = function() { DygraphLayout.prototype._evaluateLimits = function() { var xlimits = this.dygraph_.xAxisRange(); - this.minxval = xlimits[0]; - this.maxxval = xlimits[1]; + this._xAxis.minval = xlimits[0]; + this._xAxis.maxval = xlimits[1]; var xrange = xlimits[1] - xlimits[0]; - this.xscale = (xrange !== 0 ? 1 / xrange : 1.0); + this._xAxis.scale = (xrange !== 0 ? 1 / xrange : 1.0); + if (this.dygraph_.getOptionForAxis("logscale", 'x')) { + this._xAxis.xlogrange = Dygraph.log10(this._xAxis.maxval) - Dygraph.log10(this._xAxis.minval); + this._xAxis.xlogscale = (this._xAxis.xlogrange !== 0 ? 1.0 / this._xAxis.xlogrange : 1.0); + } for (var i = 0; i < this.yAxes_.length; i++) { var axis = this.yAxes_[i]; axis.minyval = axis.computedValueRange[0]; @@ -195,11 +201,11 @@ DygraphLayout.prototype._evaluateLimits = function() { axis.yrange = axis.maxyval - axis.minyval; axis.yscale = (axis.yrange !== 0 ? 1.0 / axis.yrange : 1.0); - if (axis.g.getOption("logscale")) { + if (this.dygraph_.getOption("logscale")) { axis.ylogrange = Dygraph.log10(axis.maxyval) - Dygraph.log10(axis.minyval); axis.ylogscale = (axis.ylogrange !== 0 ? 1.0 / axis.ylogrange : 1.0); if (!isFinite(axis.ylogrange) || isNaN(axis.ylogrange)) { - Dygraph.error('axis ' + i + ' of graph at ' + axis.g + + console.error('axis ' + i + ' of graph at ' + axis.g + ' can\'t be displayed in log scale for range [' + axis.minyval + ' - ' + axis.maxyval + ']'); } @@ -207,6 +213,14 @@ DygraphLayout.prototype._evaluateLimits = function() { } }; +DygraphLayout.calcXNormal_ = function(value, xAxis, logscale) { + if (logscale) { + return ((Dygraph.log10(value) - Dygraph.log10(xAxis.minval)) * xAxis.xlogscale); + } else { + return (value - xAxis.minval) * xAxis.scale; + } +}; + /** * @param {DygraphAxisType} axis * @param {number} value @@ -224,6 +238,7 @@ DygraphLayout.calcYNormal_ = function(axis, value, logscale) { DygraphLayout.prototype._evaluateLineCharts = function() { var isStacked = this.dygraph_.getOption("stackedGraph"); + var isLogscaleForX = this.dygraph_.getOptionForAxis("logscale", 'x'); for (var setIdx = 0; setIdx < this.points.length; setIdx++) { var points = this.points[setIdx]; @@ -237,7 +252,7 @@ DygraphLayout.prototype._evaluateLineCharts = function() { var point = points[j]; // Range from 0-1 where 0 represents left and 1 represents right. - point.x = (point.xval - this.minxval) * this.xscale; + point.x = DygraphLayout.calcXNormal_(point.xval, this._xAxis, isLogscaleForX); // Range from 0-1 where 0 represents top and 1 represents bottom var yval = point.yval; if (isStacked) { @@ -266,7 +281,7 @@ DygraphLayout.prototype._evaluateLineTicks = function() { for (i = 0; i < this.xTicks_.length; i++) { tick = this.xTicks_[i]; label = tick.label; - pos = this.xscale * (tick.v - this.minxval); + pos = this.dygraph_.toPercentXCoord(tick.v); if ((pos >= 0.0) && (pos < 1.0)) { this.xticks.push([pos, label]); } @@ -330,3 +345,7 @@ DygraphLayout.prototype.removeAllDatasets = function() { this.setPointsLengths = []; this.setPointsOffsets = []; }; + +return DygraphLayout; + +})();