JSFiddle - React, Tailwind, and code Playground
by sergiu079
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.16.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.4.0/Chart.min.js"></script>
<div class="panel"><canvas id="canvas1"></canvas></div>
<div class="panel"><canvas id="canvas2"></canvas></div>
CSS
body {
background: #ddd;
}
.panel {
padding-left: 5px;
background: #fff;
box-shadow: 0 0 5px 0 #999;
border-radius: 5px;
margin: 0 auto;
width: 100%;
height: 300px;
margin-top: 2em;
max-width: 600px;
}
JavaScript
const DATEFORMAT = 'hour';
const DATEFORMATS = {
'hour': 'hh:mma',
'day': 'MMM DD',
'week': 'MMM DD',
'month': 'MMM'
};
drawChart('canvas1', 10, true);
drawChart('canvas2', 30, false);
function drawChart(canvasId, totalValues, hideLastXLabel) {
new Chart(document.querySelector('#'+canvasId), {
type: 'line',
data: getData(totalValues),
options: {
layout: {
padding: {
right: 10
}
},
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}],
xAxes: [{
gridLines : {
display : true
},
ticks : {
callback: (value,index,values) => {
// don't show last tick label
if (hideLastXLabel && index+1 >= values.length) {
return '';
}
return DATEFORMATS[DATEFORMAT]? moment(value).format(DATEFORMATS[DATEFORMAT]) : value.toString();
}
}
}]
}
}
});
}
// get hourly data
function getData(total) {
var data = {
labels: [],
datasets: [{
data: [],
label: 'Data',
lineTension: 0,
backgroundColor:"rgba(128, 203, 196,0.45)",
borderColor:"#80cbc4",
pointBackgroundColor: "#80cbc4",
pointBorderWidth: 2,
hoverBorderColor:"#80cbc4",
pointBorderColor:"#fff",
pointRadius: 5,
pointHoverRadius:5
}],
}
// calculate start/end dates for hourly increment additions
var end = Date.now();
var start = total < 2? end : end-((total-1)*1000*60*60); // subtract total-1 hours from current time
for (var i=0; i<total; i++) {
// Add label from start and incrementing by hour
data.labels.push(start+(i*1000*60*60));
// Add random value 0-20
data.datasets[0].data.push(Math.round(20*Math.random()));
}
return data;
}