X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;f=dygraph-canvas.js;h=29e402ed0efe7dea7b5bd13855457f55115ef0a0;hb=b0d3471da0800f0fd5dadd1d852ab6d520a06a25;hp=165d885f86636ff38b67c34801f2387fd028882e;hpb=82dd90c5fc5dc188fc10f150704e34501e137dcf;p=dygraphs.git diff --git a/dygraph-canvas.js b/dygraph-canvas.js index 165d885..29e402e 100644 --- a/dygraph-canvas.js +++ b/dygraph-canvas.js @@ -364,13 +364,12 @@ DygraphCanvasRenderer._drawSeries = function(e, if (stepPlot) { ctx.moveTo(prevCanvasX, prevCanvasY); ctx.lineTo(point.canvasx, prevCanvasY); - prevCanvasX = point.canvasx; } - // TODO(danvk): this moveTo is rarely necessary - ctx.moveTo(prevCanvasX, prevCanvasY); ctx.lineTo(point.canvasx, point.canvasy); } + } else { + ctx.moveTo(point.canvasx, point.canvasy); } if (drawPoints || isIsolated) { pointsOnLine.push([point.canvasx, point.canvasy]); @@ -583,15 +582,15 @@ DygraphCanvasRenderer._linePlotter = function(e) { */ DygraphCanvasRenderer._errorPlotter = function(e) { var g = e.dygraph; + var setName = e.setName; var errorBars = g.getOption("errorBars") || g.getOption("customBars"); if (!errorBars) return; - var fillGraph = g.getOption("fillGraph"); + var fillGraph = g.getOption("fillGraph", setName); if (fillGraph) { g.warn("Can't use fillGraph option with error bars"); } - var setName = e.setName; var ctx = e.drawingContext; var color = e.color; var fillAlpha = g.getOption('fillAlpha', setName); @@ -616,9 +615,17 @@ DygraphCanvasRenderer._errorPlotter = function(e) { 'rgba(' + rgb.r + ',' + rgb.g + ',' + rgb.b + ',' + fillAlpha + ')'; ctx.fillStyle = err_color; ctx.beginPath(); + + var isNullUndefinedOrNaN = function(x) { + return (x === null || + x === undefined || + isNaN(x)); + }; + while (iter.hasNext) { var point = iter.next(); - if ((!stepPlot && !Dygraph.isOK(point.y)) || (stepPlot && !isNaN(prevY) && !Dygraph.isOK(prevY))) { + if ((!stepPlot && isNullUndefinedOrNaN(point.y)) || + (stepPlot && !isNaN(prevY) && isNullUndefinedOrNaN(prevY))) { prevX = NaN; continue; } @@ -661,18 +668,12 @@ DygraphCanvasRenderer._errorPlotter = function(e) { * @private */ DygraphCanvasRenderer._fillPlotter = function(e) { - var g = e.dygraph; - if (!g.getOption("fillGraph")) return; - // We'll handle all the series at once, not one-by-one. if (e.seriesIndex !== 0) return; - var ctx = e.drawingContext; - var area = e.plotArea; - var sets = e.allSeriesPoints; - var setCount = sets.length; - + var g = e.dygraph; var setNames = g.getLabels().slice(1); // remove x-axis + // getLabels() includes names for invisible series, which are not included in // allSeriesPoints. We remove those to make the two match. // TODO(danvk): provide a simpler way to get this information. @@ -680,6 +681,20 @@ DygraphCanvasRenderer._fillPlotter = function(e) { if (!g.visibility()[i]) setNames.splice(i, 1); } + var anySeriesFilled = (function() { + for (var i = 0; i < setNames.length; i++) { + if (g.getOption("fillGraph", setNames[i])) return true; + } + return false; + })(); + + if (!anySeriesFilled) return; + + var ctx = e.drawingContext; + var area = e.plotArea; + var sets = e.allSeriesPoints; + var setCount = sets.length; + var fillAlpha = g.getOption('fillAlpha'); var stepPlot = g.getOption('stepPlot'); var stackedGraph = g.getOption("stackedGraph"); @@ -691,6 +706,8 @@ DygraphCanvasRenderer._fillPlotter = function(e) { // process sets in reverse order (needed for stacked graphs) for (var setIdx = setCount - 1; setIdx >= 0; setIdx--) { var setName = setNames[setIdx]; + if (!g.getOption('fillGraph', setName)) continue; + var color = colors[setIdx]; var axis = g.axisPropertiesForSeries(setName); var axisY = 1.0 + axis.minyval * axis.yscale;