Data - Driven Documents의 약자로, Javascript 기반의 라이브러리 언어이다.
대표적인 데이터 시각화 프레임워크이다.
사용자가 입력한 시각화 규칙을 바탕으로 데이터를 반영해 결과물을 생성한다.
<script src="https://d3js.org/d3.v5.min.js"></script> //d3.js v.5
Line Chart
<div> <canvas id="myChart" width="700" height="400"></canvas> // 차트가 그려질 canvas태그를 만든다. </div> <script> var config = new Chart(document.getElementById("myChart").getContext('2d'),{ type: 'line', // 차트의 종류를 선언한다. data: { labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'], datasets: [{ // datasets 값의 배열을 추가하면 그림2와 같이 하나의 canvas에 두가지 데이터를 출력할 수 있다. label: 'My First dataset' , backgroundColor: 'rgba(255, 99, 132, 0.2)' , borderColor: 'rgb(255, 99, 132)' , data: [51, 33, 60, 25, 80, 40, 77] , fill: true }] }, options: { responsive: false, // 차트의 반응형 여부를 정하는 옵션. false일 때, canvas태그에 사이즈 속성을 주면 해당 값으로 고정형 차트가 출력된다. default = true = 반응형. title: { display: true, text: 'Chart.js Line Chart' }, scales: { xAxes: [{ display: true, // x축 표시 여부. scaleLabel: { // 축 라벨에 대한 옵션. display: true, // 라벨 표시 여부. labelString: 'Month' // 라벨 이름. } }], yAxes: [{ display: true, scaleLabel: { display: true, labelString: 'Value' }, ticks: { beginAtZero: false, // true일 경우 y축 값이 0부터 시작한다. stepSize: 10 // y축 값의 간격을 지정한다. } }] } } });
Radar Chart
<div style="width: 700px; height: 700px;"> <canvas id="myChart"></canvas> </div> <script> var ctx = document.getElementById("myChart").getContext('2d'); var radarOptions = { maintainAspectRatio: false // false일 경우 canvas가 포함된 div의 크기에 맞춰 차트가 생성된다. default = true. , title: { display: true, text: '== RADAR CHART ==' } , scale: { angleLines: { display: true // 각 라벨로부터 중점으로 이어지는 라인 표시. } } } var myChart = new Chart(ctx, { type: 'radar', data: { labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange", "Navy"], datasets: [{ label: '# first' , data: [51, 33, 60, 25, 80, 40, 77] , fill: true , backgroundColor: 'rgba(255, 99, 132, 0.2)' , borderColor: 'rgb(255, 99, 132)' , borderWidth: 2 } ,{ label: '# second' , data: [21, 10, 79, 82, 55, 46, 22] , fill: true , backgroundColor: 'rgba(54, 162, 235, 0.2)' , borderColor: 'rgb(54, 162, 235)' , borderWidth: 2 }] }, options: radarOptions }); </script>
JSON 데이터 사용하기
<div style="width: 700px; height: 700px;"> <canvas id="myChart"></canvas> </div> <script> // JSON 데이터를 선언한다. var jsonData = [{ "siteId":"P001" ,"siteNm":"한국대학교" ,"stdCount":340 } ,{ "siteId":"P002" ,"siteNm":"러시아대학교" ,"stdCount":275 }, ... ] // 사용할 value를 key값으로 가져온다. var labels = jsonData.map(function(e) { return e.siteNm; // return "한국대학교", "러시아대학교" }); var config = new Chart(document.getElementById("myChart").getContext('2d'),{ type: 'line', data: { labels: labels, // 데이터가 담긴 변수를 라벨로 사용한다. datasets: [{ label: 'My First dataset' , backgroundColor: 'rgba(255, 99, 132, 0.2)' , borderColor: 'rgb(255, 99, 132)' , data: [51, 33, 60, 25, 80, 40, 77] , fill: true }] }, // 이하 생략
Doughnut Chart
<div> <canvas id="myChart" width="900px" height="500px"></canvas> </div> <script> var ctx = document.getElementById('myChart').getContext('2d'); var jsonData = [{ "departId":"001" ,"departNm":"기계공학과" ,"count":48 } ,{ "departId":"002" ,"departNm":"정보통신공학과" ,"count":6 } ,... ] var data = jsonData.map(function(e) { return e.count; }); var label = jsonData.map(function(e) { return e.departNm; }); var config = { type: 'doughnut', data: { datasets: [{ data: data, backgroundColor: ['#ff6384', '#ff9f40', '#ffcd56', '#4bc0c0', '#36a2eb',] }], labels: label }, options: { rotation: 1 * Math.PI, // rotation 과 circumference 옵션에 1 * Math.PI 값을 주면 반쪽 도넛차트가 된다. 생략 시 기본적인 도넛차트. circumference: 1 * Math.PI, cutoutPercentage: 60, // 차트 가운데 빈 공간의 크기를 지정한다. 0일 경우 파이차트와 같이 빈 공간이 없게된다. responsive: false, legend: { position: 'top', // 범례의 위치를 지정한다. 'top','left','bottom','right'. labels: { fontSize: 16, // 범례 폰트의 사이즈. boxWidth: 50, // 범례 컬러박스의 사이즈. padding: 15 // 범례 사이의 간격. } }, title: { display: true, text: '학과별 역량평가 참여 통계', fontSize: 25 // 차트 제목 폰트의 사이즈. }, animation: { animateScale: true, // true일 경우 차트 생성시 중앙에서부터 커지는 애니메이션. animateRotate: true // true일 경우 차트 생성시 회전 애니메이션. } } }; var doughnut = new Chart(ctx, config); </script>
Bubble Chart
<div> <canvas id="myChart"></canvas> </div> <script> var options = { maintainAspectRatio: false, type: 'bubble', options: { responsive: true, aspectRatio: 3, // 캔버스의 가로:세로 비율을 나타내는 값. 1일 경우 정사각형의 차트가 그려진다. canvas태그 또는 css로 크키가 지정될 경우 무시된다. title: { display: true, text: 'BUBBLE CHART', fontSize: 20 }, }, data: { datasets: [ // dataset 하나가 버블 하나를 나타낸다. { label: 'Tony', data: [ { x: 3, // x축 위치. y: 5, // y축 위치. r: 20 // 버블 크기. } ], backgroundColor:"rgba(255, 99, 132, 0.5)", hoverBackgroundColor: "rgba(255, 99, 132, 2)" // 버블에 마우스오버 했을때의 컬러 지정. }, { label: 'Captain', data: [ { x: 3.7, y: 4, r: 90 } ], backgroundColor:"rgba(255, 19, 200, 0.5)", hoverBackgroundColor: "rgba(255, 19, 200, 2)" }, { label: 'Thor', data: [ { x: 2.1, y: 6, r: 18 } ], backgroundColor:"rgba(255, 99, 132, 0.5)", hoverBackgroundColor: "rgba(255, 99, 132, 2)" }, ... ] } } var ctx = document.getElementById('myChart').getContext('2d'); new Chart(ctx, options); </script>