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()
...