HighCharts Integration
by jlujan
HTML
<link rel="stylesheet" href="https://cdn.datatables.net/1.12.1/css/jquery.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/searchpanes/2.0.1/css/searchPanes.dataTables.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/select/1.4.0/css/select.dataTables.min.css">
<script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script src="https://cdn.datatables.net/1.12.1/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/searchpanes/2.0.1/js/dataTables.searchPanes.min.js"></script>
<script src="https://cdn.datatables.net/select/1.4.0/js/dataTables.select.min.js"></script>
<script src="https://code.highcharts.com/highcharts.js"></script>
<table id="example" class="display" style="width:100%">
<thead>
<tr>
<th>Sede</th>
<th>Pais</th>
<th>Sexo</th>
<th>Company</th>
</tr>
</thead>
</table>
JavaScript
$(document).ready(function () {
// Create DataTable
var table = $('#example').DataTable({
dom: 'Pfrtip',
deferRender : true,
ajax: 'https://preview.keenthemes.com/api/datatables.php',
columns: [
{ "data" : "RecordID" },
{ "data" : "Country" },
{ "data" : "Gender" },
{ "data" : "TimeZone" },
],
buttons: [
'copy', 'excel', 'pdf', 'print', 'csv',
{
text: 'JSON',
action: function (e, dt, button, config) {
var data = dt.buttons.exportData();
$.fn.dataTable.fileSave(
new Blob([JSON.stringify(data)]),
'Export.json'
);
}
}
],
});
// Create the chart with initial data
var container = $('<div/>').insertBefore(table.table().container());
var chart = Highcharts.chart(container[0], {
chart: {
type: 'pie',
},
title: {
text: 'Staff Count Per Position',
},
series: [
{
data: chartData(table),
},
],
});
// On each draw, update the data in the chart
table.on('draw', function () {
chart.series[0].setData(chartData(table));
});
});
function chartData(table) {
var counts = {};
// Count the number of entries for each position
table
.column(1, { search: 'applied' })
.data()
.each(function (val) {
if (counts[val]) {
counts[val] += 1;
} else {
counts[val] = 1;
}
});
// And map it to the format highcharts uses
return $.map(counts, function (val, key) {
...