Highcharts test tool
HTML
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<div id="container"></div>
<button id="extract">Extract segment</button>
CSS
#container {
min-width: 300px;
max-width: 800px;
height: 300px;
margin: 1em auto;
}
JavaScript
var chart = Highcharts.chart('container', {
title: {
text: 'Click on points to select segment'
},
subtitle: {
text: 'Click the "extract segment" button to add segment as a new series'
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
plotOptions: {
series: {
point: {
events: {
// Allow selection of two points
click: function (e) {
var point = e.point,
series = point.series;
series.selectedPoints = series.selectedPoints || [];
series.selectedPoints.push(point);
point.select(true, true);
if (series.selectedPoints.length > 2) {
series.selectedPoints.shift().select(false, true);
}
}
}
}
}
},
series: [{
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
}]
});
$('#extract').click(function () {
Highcharts.each(chart.series, function (series) {
var selected = series.selectedPoints,
segment = [];
if (selected && selected.length > 1) {
// There are selected points in this series. Locate segment
for (var i = Math.min(selected[0].index, selected[1].index); i < Math.max(selected[0].index, selected[1].index) + 1; ++i) {
segment.push({
category: series.points[i].category,
x: series.points[i].x,
y: series.points[i].y
});
}
// Add segment as a new series
chart.addSeries({
name: 'Extracted from ' + series.name,
data: segment
});
// Unselect from series
...