The following chart is from a sample I found in the samples/timeScale folder of Chart.js Github repository. As far as I understand, the bundle version of Chart.js should include the moment.js as well. But I could not make the following code to work, without adding the moment.js from a CDN.
If you now how to make the bundled version to work, without using moment.min.js, please let me know to update the code.
Using our plugin, named Blazing Charts, I added the following shortcode to this post:
[BlazingChart charttype="chartjs" source="a Chart Snippet" options="bundle"]
The script saved as a Chart Snippet is as following:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | <script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script> <style> canvas { -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; } </style> <div style="width:75%;"> <canvas id="canvas"></canvas> </div> <br> <br> <button id="randomizeData">Randomize Data</button> <button id="addData">Add Data</button> <button id="removeData">Remove Data</button> <script> window.onload = function() { function randomScalingFactor() { return Math.round(Math.random() * 100 * (Math.random() > 0.5 ? -1 : 1)); } function randomColorFactor() { return Math.round(Math.random() * 255); } function randomColor(opacity) { return 'rgba(' + randomColorFactor() + ',' + randomColorFactor() + ',' + randomColorFactor() + ',' + (opacity || '.3') + ')'; } function newDate(days) { return moment().add(days, 'd').toDate(); } function newDateString(days) { return moment().add(days, 'd').format(); } var config = { type: 'line', data: { datasets: [{ label: "Dataset with string point data", data: [{ x: newDateString(0), y: randomScalingFactor() }, { x: newDateString(2), y: randomScalingFactor() }, { x: newDateString(4), y: randomScalingFactor() }, { x: newDateString(5), y: randomScalingFactor() }], fill: false }, { label: "Dataset with date object point data", data: [{ x: newDate(0), y: randomScalingFactor() }, { x: newDate(2), y: randomScalingFactor() }, { x: newDate(4), y: randomScalingFactor() }, { x: newDate(5), y: randomScalingFactor() }], fill: false }] }, options: { responsive: true, title:{ display:true, text:"Chart.js Time Point Data" }, scales: { xAxes: [{ type: "time", display: true, scaleLabel: { display: true, labelString: 'Date' } }], yAxes: [{ display: true, scaleLabel: { display: true, labelString: 'value' } }] } } }; jQuery.each(config.data.datasets, function(i, dataset) { dataset.borderColor = randomColor(0.4); dataset.backgroundColor = randomColor(0.5); dataset.pointBorderColor = randomColor(0.7); dataset.pointBackgroundColor = randomColor(0.5); dataset.pointBorderWidth = 1; }); jQuery('#randomizeData').click(function() { jQuery.each(config.data.datasets, function(i, dataset) { jQuery.each(dataset.data, function(j, dataObj) { dataObj.y = randomScalingFactor(); }); }); window.myLine.update(); }); jQuery('#addData').click(function() { if (config.data.datasets.length > 0) { var lastTime = myLine.scales['x-axis-0'].labelMoments[0].length ? myLine.scales['x-axis-0'].labelMoments[0][myLine.scales['x-axis-0'].labelMoments[0].length - 1] : moment(); var newTime = lastTime .clone() .add(1, 'day') .format('MM/DD/YYYY HH:mm'); for (var index = 0; index < config.data.datasets.length; ++index) { config.data.datasets[index].data.push({ x: newTime, y: randomScalingFactor() }); } window.myLine.update(); } }); jQuery('#removeData').click(function() { config.data.datasets.forEach(function(dataset, datasetIndex) { dataset.data.pop(); }); window.myLine.update(); }); var ctx = document.getElementById("canvas").getContext("2d"); window.myLine = new Chart(ctx, config); }; </script> |
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script> <style> canvas { -moz-user-select: none; -webkit-user-select: none; -ms-user-select: none; } </style> <div style="width:75%;"> <canvas id="canvas"></canvas> </div> <br> <br> <button id="randomizeData">Randomize Data</button> <button id="addData">Add Data</button> <button id="removeData">Remove Data</button> <script> window.onload = function() { function randomScalingFactor() { return Math.round(Math.random() * 100 * (Math.random() > 0.5 ? -1 : 1)); } function randomColorFactor() { return Math.round(Math.random() * 255); } function randomColor(opacity) { return 'rgba(' + randomColorFactor() + ',' + randomColorFactor() + ',' + randomColorFactor() + ',' + (opacity || '.3') + ')'; } function newDate(days) { return moment().add(days, 'd').toDate(); } function newDateString(days) { return moment().add(days, 'd').format(); } var config = { type: 'line', data: { datasets: [{ label: "Dataset with string point data", data: [{ x: newDateString(0), y: randomScalingFactor() }, { x: newDateString(2), y: randomScalingFactor() }, { x: newDateString(4), y: randomScalingFactor() }, { x: newDateString(5), y: randomScalingFactor() }], fill: false }, { label: "Dataset with date object point data", data: [{ x: newDate(0), y: randomScalingFactor() }, { x: newDate(2), y: randomScalingFactor() }, { x: newDate(4), y: randomScalingFactor() }, { x: newDate(5), y: randomScalingFactor() }], fill: false }] }, options: { responsive: true, title:{ display:true, text:"Chart.js Time Point Data" }, scales: { xAxes: [{ type: "time", display: true, scaleLabel: { display: true, labelString: 'Date' } }], yAxes: [{ display: true, scaleLabel: { display: true, labelString: 'value' } }] } } }; jQuery.each(config.data.datasets, function(i, dataset) { dataset.borderColor = randomColor(0.4); dataset.backgroundColor = randomColor(0.5); dataset.pointBorderColor = randomColor(0.7); dataset.pointBackgroundColor = randomColor(0.5); dataset.pointBorderWidth = 1; }); jQuery('#randomizeData').click(function() { jQuery.each(config.data.datasets, function(i, dataset) { jQuery.each(dataset.data, function(j, dataObj) { dataObj.y = randomScalingFactor(); }); }); window.myLine.update(); }); jQuery('#addData').click(function() { if (config.data.datasets.length > 0) { var lastTime = myLine.scales['x-axis-0'].labelMoments[0].length ? myLine.scales['x-axis-0'].labelMoments[0][myLine.scales['x-axis-0'].labelMoments[0].length - 1] : moment(); var newTime = lastTime .clone() .add(1, 'day') .format('MM/DD/YYYY HH:mm'); for (var index = 0; index < config.data.datasets.length; ++index) { config.data.datasets[index].data.push({ x: newTime, y: randomScalingFactor() }); } window.myLine.update(); } }); jQuery('#removeData').click(function() { config.data.datasets.forEach(function(dataset, datasetIndex) { dataset.data.pop(); }); window.myLine.update(); }); var ctx = document.getElementById("canvas").getContext("2d"); window.myLine = new Chart(ctx, config); }; </script>
wow – thanks so much. this saved me. i wish the chart.js documentation mentioned this more clearly.
This is a very useful example missing from chartJs documentation.
Thank you very much!