Highcharts is a versatile JavaScript charting library for the web. The library supports all kinds of charts: scatter plots, line charts, area chart, bar charts, pie charts and more.
A data series of type line or spline connects the points in the order of the x-axis when rendered. It is possible to invert the axes by setting the property inverted: true in the chart options.
var chart = $('#chart').highcharts({ chart: { inverted: true }, series: [{ name: 'Example', type: 'line', data: [ {x: 10, y: 50}, {x: 20, y: 56.5}, {x: 30, y: 46.5}, // ... ] }] });
Connecting points in an arbitrary order
Connecting the points in an arbitrary order, however, is not supported by default. I couldn’t find a Highcharts plugin which supports this either, so I implemented a solution by modifying the getGraphPath function of the series object:
var series = $('#chart').highcharts().series[0]; var oldGetGraphPath = series.getGraphPath; Object.getPrototypeOf(series).getGraphPath = function(points, nullsAsZeroes, connectCliffs) { points = points || this.points; points.sort(function(a, b) { return a.sortIndex - b.sortIndex; }); return oldGetGraphPath.call(this, points, nullsAsZeroes, connectCliffs); };
The new function sorts the points by a new property called sortIndex before the line path of the chart gets rendered. This new property must be assigned to each point object of the series data:
series.setData([ {x: 10, y: 50, sortIndex: 1}, {x: 20, y: 56.5, sortIndex: 2}, {x: 30, y: 46.5, sortIndex: 3}, // ... ], true);
Now we can render charts with points connected in an arbitrary order like this:
