docs: function plot(options) {
    /* Required Options */
    if (!options.data || !options.filename) {
      throw("The options object must have 'data' and 'filename' properties!");
      return;
    }
    /* Translate data into an object if needs be */
    if (_.isArray(options.data)) {
      /* If it's a one-dimentional array */
      if (_.isEqual(_.flatten(options.data), options.data)) {
        options.data = { 'Series 1': options.data };
      }
    }
  
    /* Defaults */
    if (!options.style) {
      options.style = 'lines'; /* Default to lines */
    }
  
    /* Apply moving averages and maximums */
    if (options.moving_avg) {
      options.data = apply_moving_filter(options.data, moving_average, options.moving_avg);
    }
    if (options.moving_max) {
      options.data = apply_moving_filter(options.data, moving_maximum, options.moving_max);
    }
  
    /* Execute Gnuplot specifing a function to be called when it terminates */
    if (options.format === 'pdf') { /* Special setup for pdf */
      gnuplot = exec('gnuplot | ps2pdf - ' + options.filename,
  		   (options.exec ? options.exec : {}),
  		   options.finish || post_gnuplot_processing);
  
    } else { /* Default for everything else */
      gnuplot = exec('gnuplot > ' + options.filename,
  		   (options.exec ? options.exec : {}),
  		   options.finish || post_gnuplot_processing);
    }
  
    /* Sets up gnuplot based on the properties we've been given in the
     * options object */
    setup_gnuplot(gnuplot, options);
  
    /* Get an array containing all the series */
    var series = _.keys(options.data);
    /* Reject series that are functions or come from higher up the protoype chain */
    var i;
    for (i = 0; i < series.length; i += 1) {
      if (!options.data.hasOwnProperty(series[i]) ||
  	typeof options.data[series[i]] === 'function') {
        delete series[i]; /* undefine this element */
      }
    }
    /* Filter out any undefined elements */
    series = _.filter(series, function() { return true; });
  
    /* Print the command to actually do the plot */
    gnuplot.stdin.write('plot');
    for (i = 1; i <= series.length; i += 1) { /* For each series */
      /* Instruct gnuplot to plot this series */
      gnuplot.stdin.write('\'-\' using 1:2 title\'' + series[i - 1] +
  			'\' with ' + options.style + ' lt 1 lc ' + i);
      /* If another series is to follow, add a comma */
      if (i < series.length) { gnuplot.stdin.write(','); }
    }
    gnuplot.stdin.write('\n');
  
    /* Print out the data */
    for (i = 0; i < series.length; i += 1) { /* For each series */
      for (key in options.data[series[i]]) {
        gnuplot.stdin.write(key + ' ' + options.data[series[i]][key] + '\n');
      }
      /* Terminate the data */
      gnuplot.stdin.write('e\n');
    }
  
    gnuplot.stdin.end();
  }