// Private methods
//------------------------------------------------------------------
-rangeSelector.prototype.getOption_ = function(name) {
- return this.dygraph_.getOption(name);
+rangeSelector.prototype.getOption_ = function(name, opt_series) {
+ return this.dygraph_.getOption(name, opt_series);
};
rangeSelector.prototype.setDefaultOption_ = function(name, value) {
var dataPoint = combinedSeriesData.data[i];
var x = ((dataPoint[0] !== null) ? ((dataPoint[0] - xExtremes[0])*xFact) : NaN);
var y = ((dataPoint[1] !== null) ? (canvasHeight - (dataPoint[1] - combinedSeriesData.yMin)*yFact) : NaN);
+
+ // Skip points that don't change the x-value. Overly fine-grained points
+ // can cause major slowdowns with the ctx.fill() call below.
+ if (prevX !== null && Math.round(x) == Math.round(prevX)) {
+ continue;
+ }
+
if (isFinite(x) && isFinite(y)) {
if(prevX === null) {
ctx.lineTo(x, canvasHeight);
rangeSelector.prototype.computeCombinedSeriesAndLimits_ = function() {
var g = this.dygraph_;
var logscale = this.getOption_('logscale');
-
- // Create a combined series (average of all series values).
var i;
+ // Select series to combine. By default, all series are combined.
+ var numColumns = g.numColumns();
+ var labels = g.getLabels();
+ var includeSeries = new Array(numColumns);
+ var anySet = false;
+ for (i = 1; i < numColumns; i++) {
+ var include = this.getOption_('showInRangeSelector', labels[i]);
+ includeSeries[i] = include;
+ if (include !== null) anySet = true; // it's set explicitly for this series
+ }
+ if (!anySet) {
+ for (i = 0; i < includeSeries.length; i++) includeSeries[i] = true;
+ }
+
+ // Create a combined series (average of selected series values).
// TODO(danvk): short-circuit if there's only one series.
var rolledSeries = [];
var dataHandler = g.dataHandler_;
var options = g.attributes_;
for (i = 1; i < g.numColumns(); i++) {
+ if (!includeSeries[i]) continue;
var series = dataHandler.extractSeries(g.rawData_, i, options);
if (g.rollPeriod() > 1) {
series = dataHandler.rollingAverage(series, g.rollPeriod(), options);