var drawGapPoints = g.getOption('drawGapEdgePoints', e.setName);
var points = e.points;
+ var setName = e.setName;
var iter = Dygraph.createIterator(points, 0, points.length,
DygraphCanvasRenderer._getIteratorPredicate(
- g.getOption("connectSeparatedPoints"))); // TODO(danvk): per-series?
+ g.getOption("connectSeparatedPoints", setName)));
var stroking = strokePattern && (strokePattern.length >= 2);
var iter = Dygraph.createIterator(points, 0, points.length,
DygraphCanvasRenderer._getIteratorPredicate(
- g.getOption("connectSeparatedPoints")));
+ g.getOption("connectSeparatedPoints", setName)));
var newYs;
var stackedGraph = g.getOption("stackedGraph");
var colors = g.getColors();
- var baseline = {}; // for stacked graphs: baseline for filling
+ // For stacked graphs, track the baseline for filling.
+ //
+ // The filled areas below graph lines are trapezoids with two
+ // vertical edges. The top edge is the line segment being drawn, and
+ // the baseline is the bottom edge. Each baseline corresponds to the
+ // top line segment from the previous stacked line. In the case of
+ // step plots, the trapezoids are rectangles.
+ var baseline = {};
var currBaseline;
var prevStepPlot; // for different line drawing modes (line/step) per series
var points = sets[setIdx];
var iter = Dygraph.createIterator(points, 0, points.length,
DygraphCanvasRenderer._getIteratorPredicate(
- g.getOption("connectSeparatedPoints")));
+ g.getOption("connectSeparatedPoints", setName)));
// setup graphics context
var prevX = NaN;
var point = iter.next();
if (!Dygraph.isOK(point.y)) {
prevX = NaN;
+ if (point.y_stacked !== null && !isNaN(point.y_stacked)) {
+ baseline[point.canvasx] = area.h * point.y_stacked + area.y;
+ }
continue;
}
if (stackedGraph) {