Highcharts Demo

author(s): Torstein Hønsi

by vasagi

HTML

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

<div id="container"></div>

CSS

#container {
    height: 400px;
    max-width: 800px;
    margin: 0 auto;
}

JavaScript

function getData(n) {
    const arr = [];
    let a,
        b,
        c,
        spike;
    for (let i = 0; i < n; i = i + 1) {
        if (i % 100 === 0) {
            a = 2 * Math.random();
        }
        if (i % 1000 === 0) {
            b = 2 * Math.random();
        }
        if (i % 10000 === 0) {
            c = 2 * Math.random();
        }
        if (i % 50000 === 0) {
            spike = 0;
        } else {
            spike = 0;
        }
        arr.push([
            i,
            2 * Math.sin(i / 100) + a + b + c + spike + Math.random()
        ]);
    }
    return arr;
}

function getSeries(n, s) {
    let i = 0;
    const r = [];


        r.push({
            data: getData(n),
            lineWidth: 2,
            boostThreshold: 1
        });


    return r;
}

const n = 1000,
    s = 600,
    series = getSeries(n, s);


console.time('line');
Highcharts.chart('container', {

    chart: {
        zooming: {
            type: 'x'
        },
         events: {
      load: function() {
        const chart = this;
        const {
          tickPositions,
          ticks
        } = chart.xAxis[0];

        tickPositions.forEach(tickPosition => {
          const tick = ticks[tickPosition];
          const label = tick.label;

          label.on('mouseover', e => {
            if (chart.myLabel) {
              chart.myLabel.destroy();
            }

            chart.myLabel = chart.renderer.button(label.textStr, e.x, e.y, function() {
                const tickPos = tick.pos;
                chart.series.forEach(series => {
                  series.data.filter(point => point.x === tickPos).forEach(point => point.remove(false));
                });
                chart.redraw();
              }, 'rectangle')
              .css({
                color: '#FFFFFF'
              })
              .attr({
                fill: 'rgba(0, 0, 0, 0.75)',
                padding: 8,
                r: 4
              })
              .add()
             ...