X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=dygraph-canvas.js;h=2f8821e17fad93e0d16d743508c6e04eb2119f6c;hb=44f29e932dcbe83c1bfaebb8735579392e27a5df;hp=5c0fada2a417e66b6f181d3cf9d52ff7e8893646;hpb=ff022debe05bc120e1342725aae7dfaa63c6f139;p=dygraphs.git diff --git a/dygraph-canvas.js b/dygraph-canvas.js index 5c0fada..2f8821e 100644 --- a/dygraph-canvas.js +++ b/dygraph-canvas.js @@ -32,9 +32,9 @@ DygraphLayout.prototype.addDataset = function(setname, set_xy) { DygraphLayout.prototype.setAnnotations = function(ann) { // The Dygraph object's annotations aren't parsed. We parse them here and - // save a copy. + // save a copy. If there is no parser, then the user must be using raw format. this.annotations = []; - var parse = this.attr_('xValueParser'); + var parse = this.attr_('xValueParser') || function(x) { return x; }; for (var i = 0; i < ann.length; i++) { var a = {}; if (!ann[i].xval && !ann[i].x) { @@ -89,8 +89,15 @@ DygraphLayout.prototype._evaluateLimits = function() { axis.yrange = axis.maxyval - axis.minyval; axis.yscale = (axis.yrange != 0 ? 1.0 / axis.yrange : 1.0); - axis.ylogrange = Math.log(axis.maxyval) - Math.log(axis.minyval); - axis.ylogscale = (axis.ylogrange != 0 ? 1.0 / axis.ylogrange : 1.0); + if (axis.g.attr_("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)) { + axis.g.error('axis ' + i + ' of graph at ' + axis.g + + ' can\'t be displayed in log scale for range [' + + axis.minyval + ' - ' + axis.maxyval + ']'); + } + } } }; @@ -105,17 +112,17 @@ DygraphLayout.prototype._evaluateLineCharts = function() { for (var j = 0; j < dataset.length; j++) { var item = dataset[j]; - - var foo; - if (this.dygraph_.attr_("logscale")) { - foo = 1.0 - ((Math.log(parseFloat(item[1])) - Math.log(axis.minyval)) * axis.ylogscale); // really should just be yscale. + + var yval; + if (axis.logscale) { + yval = 1.0 - ((Dygraph.log10(parseFloat(item[1])) - Dygraph.log10(axis.minyval)) * axis.ylogscale); // really should just be yscale. } else { - foo = 1.0 - ((parseFloat(item[1]) - axis.minyval) * axis.yscale); + yval = 1.0 - ((parseFloat(item[1]) - axis.minyval) * axis.yscale); } var point = { // TODO(danvk): here x: ((parseFloat(item[0]) - this.minxval) * this.xscale), - y: foo, + y: yval, xval: parseFloat(item[0]), yval: parseFloat(item[1]), name: setName @@ -732,8 +739,6 @@ DygraphCanvasRenderer.prototype._renderLineChart = function() { } // create paths - var isOK = function(x) { return x && !isNaN(x); }; - var ctx = context; if (errorBars) { if (fillGraph) { @@ -761,12 +766,12 @@ DygraphCanvasRenderer.prototype._renderLineChart = function() { for (var j = 0; j < this.layout.points.length; j++) { var point = this.layout.points[j]; if (point.name == setName) { - if (!isOK(point.y)) { + if (!Dygraph.isOK(point.y)) { prevX = NaN; continue; } - // TODO(danvk): here is a comment. + // TODO(danvk): here if (stepPlot) { var newYs = [ prevY - point.errorPlus * yscale, prevY + point.errorMinus * yscale ]; @@ -826,7 +831,7 @@ DygraphCanvasRenderer.prototype._renderLineChart = function() { for (var j = 0; j < this.layout.points.length; j++) { var point = this.layout.points[j]; if (point.name == setName) { - if (!isOK(point.y)) { + if (!Dygraph.isOK(point.y)) { prevX = NaN; continue; } @@ -873,7 +878,7 @@ DygraphCanvasRenderer.prototype._renderLineChart = function() { for (var j = 0; j < points.length; j++) { var point = points[j]; if (point.name == setName) { - if (!isOK(point.canvasy)) { + if (!Dygraph.isOK(point.canvasy)) { if (stepPlot && prevX != null) { // Draw a horizontal line to the start of the missing data ctx.beginPath(); @@ -889,7 +894,7 @@ DygraphCanvasRenderer.prototype._renderLineChart = function() { // A point is "isolated" if it is non-null but both the previous // and next points are null. var isIsolated = (!prevX && (j == points.length - 1 || - !isOK(points[j+1].canvasy))); + !Dygraph.isOK(points[j+1].canvasy))); if (!prevX) { prevX = point.canvasx;