Chart.js 動態圖表的使用


一、相關資料

1. 簡介

Chart.js 是一個基於 HTML5 的簡單的面向對象的圖表庫,支持包括 IE7/8 和所有現代瀏覽器。支持六種圖標:曲線圖(Linecharts)、柱狀圖(Barcharts)、雷達圖(Radarcharts)、餅狀圖(Piecharts)、極坐標區域圖(Polararea charts)以及圓環圖(Doughnutcharts)。並且帶有動畫效果(animated),支持 retina 屏。

2. 官網

官網:https://www.chartjs.org/

二、示例代碼

本案例演示了最近 24 小時的 PV/UV 實時數據,在線 DEMO

<!DOCTYPE html>
<html>
<head>
	<title>Chart.js 動態圖表的使用</title>
	<script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script>
</head>
<body>
	<div>
		<canvas id="chart"></canvas>
	</div>

	<script type="text/javascript">
	
		var dataLabels = ['1h', '2h', '3h', '4h', '5h', '6h', '7h', '8h', '9h', '10h', '11h', '12h', '13h', '14h', '15h', '16h', '17h', '18h', '19h', '20h', '21h', '22h', '23h', '0h'];
		var dataPV = [133058,253219,255194,233058,253219,277318,277714,273337,255194,277318,277714,273337,233058,253219,277318,253219,277318,277714,273337,255194,277714,273337,255194,293058];
		var dataUV = [10651,22039,23955,23754,22664,10651,22039,23765,23955,23754,22664,23765,23955,23754,22664,10651,22039,23765,10651,22039,23765,23955,23754,22664];

		var config = {
			type: 'line',
			data: {
				labels: dataLabels,
				datasets: [
					{
		                label: 'PV',
		                data: dataPV,
		                backgroundColor: 'rgb(255, 99, 132)',
						borderColor: 'rgb(255, 99, 132)',
		                fill: false,
					},
					{
		                label: 'UV',
		                data: dataUV, 
		                backgroundColor: 'rgb(75, 192, 192)',
						borderColor: 'rgb(75, 192, 192)',
		                fill: false, 
		            }
				]
			},
			options: {
				responsive: true,
				title: {
					display: true,
					text: 'PV/UV 實時統計'
				},
			}
		};

		var ctx = document.getElementById('chart').getContext('2d');
		var chart = new Chart(ctx, config);

		setInterval(function() {
			if (config.data.datasets.length > 0) {

				var last = parseInt(dataLabels[dataLabels.length - 1]);
				var label = last + 1;
				if (last >= 23) {
					label = 0;
				}
				label = label + 'h';

				dataLabels.push(label);
				dataPV.push(getRandomNum(200000, 300000));
				dataUV.push(getRandomNum(10000, 80000));

				dataLabels.shift();
				dataPV.shift();
				dataUV.shift();

				chart.update();
			}
		}, 1000);

		function getRandomNum(min, max) {
		    var range = max - min;
		    var rand = Math.random();
		    return(min + Math.round(rand * range));
		}

	</script>
</body>
</html>

本文首發於馬燕龍個人博客,歡迎分享,轉載請標明出處。
馬燕龍個人博客:http://www.mayanlong.com
馬燕龍個人微博:http://weibo.com/imayanlong
馬燕龍Github主頁:https://github.com/yanlongma


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM