X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=dygraph-layout.js;h=8829b6c832add3bdd87fc3896249534d0fa47e9f;hb=5108eb2029afe739872ebfb58f9fb826cef9ea13;hp=99ae50c6800ca396e483d5e6b8bd8cf3812a86ba;hpb=22bce4f209d99203fcb3c3892ddf5ddb6d359b93;p=dygraphs.git diff --git a/dygraph-layout.js b/dygraph-layout.js index 99ae50c..8829b6c 100644 --- a/dygraph-layout.js +++ b/dygraph-layout.js @@ -1,5 +1,5 @@ // Copyright 2011 Dan Vanderkam (danvdk@gmail.com) -// All Rights Reserved. +// MIT-licensed (http://opensource.org/licenses/MIT) /** * @fileoverview Based on PlotKitLayout, but modified to meet the needs of @@ -126,35 +126,53 @@ DygraphLayout.prototype._evaluateLimits = function() { } }; +DygraphLayout._calcYNormal = function(axis, value) { + if (axis.logscale) { + return 1.0 - ((Dygraph.log10(value) - Dygraph.log10(axis.minyval)) * axis.ylogscale); + } else { + return 1.0 - ((value - axis.minyval) * axis.yscale); + } +}; + DygraphLayout.prototype._evaluateLineCharts = function() { // add all the rects this.points = new Array(); + // An array to keep track of how many points will be drawn for each set. + // This will allow for the canvas renderer to not have to check every point + // for every data set since the points are added in order of the sets in + // datasets. + this.setPointsLengths = new Array(); + for (var setName in this.datasets) { if (!this.datasets.hasOwnProperty(setName)) continue; var dataset = this.datasets[setName]; var axis = this.dygraph_.axisPropertiesForSeries(setName); + var setPointsLength = 0; + for (var j = 0; j < dataset.length; j++) { var item = dataset[j]; + var xValue = parseFloat(dataset[j][0]); + var yValue = parseFloat(dataset[j][1]); + + // Range from 0-1 where 0 represents left and 1 represents right. + var xNormal = (xValue - this.minxval) * this.xscale; + // Range from 0-1 where 0 represents top and 1 represents bottom + var yNormal = DygraphLayout._calcYNormal(axis, yValue); - 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 { - yval = 1.0 - ((parseFloat(item[1]) - axis.minyval) * axis.yscale); - } var point = { // TODO(danvk): here - x: ((parseFloat(item[0]) - this.minxval) * this.xscale), - y: yval, - xval: parseFloat(item[0]), - yval: parseFloat(item[1]), + x: xNormal, + y: yNormal, + xval: xValue, + yval: yValue, name: setName }; - this.points.push(point); + setPointsLength += 1; } + this.setPointsLengths.push(setPointsLength); } }; @@ -198,6 +216,7 @@ DygraphLayout.prototype.evaluateWithError = function() { if (!this.datasets.hasOwnProperty(setName)) continue; var j = 0; var dataset = this.datasets[setName]; + var axis = this.dygraph_.axisPropertiesForSeries(setName); for (var j = 0; j < dataset.length; j++, i++) { var item = dataset[j]; var xv = parseFloat(item[0]); @@ -205,8 +224,13 @@ DygraphLayout.prototype.evaluateWithError = function() { if (xv == this.points[i].xval && yv == this.points[i].yval) { - this.points[i].errorMinus = parseFloat(item[2]); - this.points[i].errorPlus = parseFloat(item[3]); + var errorMinus = parseFloat(item[2]); + var errorPlus = parseFloat(item[3]); + + var yv_minus = yv - errorMinus; + var yv_plus = yv + errorPlus; + this.points[i].y_top = DygraphLayout._calcYNormal(axis, yv_minus); + this.points[i].y_bottom = DygraphLayout._calcYNormal(axis, yv_plus); } } }