Frequency Polygon (many) with Mean and StDev

by jlbriggs

HTML

<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/highcharts-more.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>

<div id="container" style="width:600px;height:500px;margin:1.5em 1em;"></div>

<script>
var d          = new Date();
var pointStart = d.getTime();
Highcharts.setOptions({
    global: {
        useUTC:false
    },
    colors: [
        'rgba( 0,   154, 253, 0.9 )', //bright blue
        'rgba( 253, 99,  0,   0.9 )', //bright orange
        'rgba( 40,  40,  56,  0.9 )', //dark
        'rgba( 253, 0,   154, 0.9 )', //bright pink
        'rgba( 154, 253, 0,   0.9 )', //bright green
        'rgba( 145, 44,  138, 0.9 )', //mid purple
        'rgba( 45,  47,  238, 0.9 )', //mid blue
        'rgba( 177, 69,  0,   0.9 )', //dark orange
        'rgba( 140, 140, 156, 0.9 )', //mid
        'rgba( 238, 46,  47,  0.9 )', //mid red
        'rgba( 44,  145, 51,  0.9 )', //mid green
        'rgba( 103, 16,  192, 0.9 )'  //dark purple
    ],
    chart: {
        alignTicks:false,
        type:'',
        margin:[60,25,100,90],
        //borderRadius:10,
        //borderWidth:1,
        //borderColor:'rgba(156,156,156,.25)',
        //backgroundColor:'rgba(204,204,204,.25)',
        //plotBackgroundColor:'rgba(255,255,255,1)',
        style: {
            fontFamily: 'Abel,serif'
        },
        events:{
            load: function() {
                this.credits.element.onclick = function() {
                    window.open(
                      'http://stackoverflow.com/users/1011544/jlbriggs?tab=profile'
                    );
                 }
            }
        }
    },
    credits: {
        text : 'http://stackoverflow.com/users/1011544/jlbriggs',
        href : 'http://stackoverflow.com/users/1011544/jlbriggs?tab=profile'
    },
    title: {
        text:'Generate Frequency Polygons',
        align:'left',
        margin:10,
        x: 50,
        style: {
  ...

CSS

@import url(https://fonts.googleapis.com/css?family=Changa+One|Loved+by+the+King|Fredericka+the+Great|Droid+Serif:400,700,400italic|Abel|Oswald:400,300,700);

body {
    font-family:Abel, Calibri, Helvetica, sans-serif;
    font-size:95%;
}

JavaScript

var chart;
var numberOfSeries = 25;
var numberOfPoints = 500;
var mainData       = randomData(numberOfPoints);
var backgroundData = [];
for (var i = 0; i < numberOfSeries; i++) {
	backgroundData.push(randomData(numberOfPoints));
}
var mainStats = stats(mainData);

$(function() {
    $('#container').highcharts({
        chart       : { type    : 'line', marginTop : 100 },
        title       : { },
        subtitle    : { },
        legend      : { enabled : true },
        tooltip     : { },
        plotOptions : {
            series  : {
                lineWidth : 2
            }
        },
        xAxis      : { 
        	title    : { text : 'Range'     }
        },
        yAxis      : { title    : { text : 'Frequency' }, min:0 }
    });	
    chart = $('#container').highcharts();

    //add the primary series
    chart.addSeries({
    	id     : 'main',
    	zIndex : 4,
      name   : 'Distribution 1',
      data   : binData(mainData)
    });
    //add the first background series so that we can link the rest to it
    chart.addSeries({
      id        : 'history',
      name      : 'Distribution History',
      color     : 'rgba(204,204,204,.5)',
      lineWidth : 1,
      states    : { hover: { lineWidthPlus: 1 } },
      data      : binData(backgroundData[0])
    });  
    //add the rest of the background series
    $.each( backgroundData, function(i, data) {
      if( i > 0 ) {
        chart.addSeries({
          linkedTo  : 'history',
          name      : 'Distribution '+(i+3),
          color     : 'rgba(204,204,204,.5)',
          lineWidth : 1,
          states    : { hover: { lineWidthPlus: 1 } },
          data      : binData(data)
        });
      }
    });
    
    //add plot lines for mean and std deviations
    var stdevs = {};
    stdevs.sp1 = mainStats.mean + mainStats.deviation; 
    stdevs.sp2 = stdevs.sp1     + mainStats.deviation;
    stdevs.sp3 = stdevs.sp2     + mainStats.deviation;
    stdevs.sm1 = mainStats.mean - mainStats.deviation;...