Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Tags
more
Archives
Today
Total
관리 메뉴

JS Coding

[JavaScript] Chat.js 를 이용한 차트 만들기 본문

JavaScript

[JavaScript] Chat.js 를 이용한 차트 만들기

JSKJS 2023. 11. 10. 15:40

구글 검색창에 

 

D3.js / C3.js 등 차트를 이용할 수있는 다양한 컨텐츠가 있지만

 

사용하기 간편하고 이해하기 쉽게 만들어진 Chat.js 에 대해서 알아보겠다.

 

크롬 검색창에 chat.js 를 검색하면 사이트가 나오는데

 

거기서 Getting started 를 눌러 들어가면 있느 소스를 가져온다.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
<body>

    <!-- 차트가 그려지는 div -->
    <div style="width:500px">
        <canvas id="myChart"></canvas>
      </div>
     
     
     
      <script>
        const ctx = document.querySelector('#myChart');
            const myChart =new Chart(ctx, {
                type: 'bar',
                data: {
                    labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
                    datasets: [{
                        type: "line",
                        label: '# of Votes',
                        data: [12, 19, 3, 5, 2, 3],
                        borderWidth: 1
                    }]
                },
                options: {
                    scales: {
                        y: {
                            beginAtZero: true
                        }
                    }
                }
        });
        // chart.js 가 잘 만들어진 이유, return값으로 제어가 직관적
        /*
        // line과 bar는 한 차트에서 같이 쓰일 수 있다 (mixed 차트)
        const myChart = new Chart(ctx, {
        //   type: 'bar',   // 비교 할때
        //   type: 'line',  // 흐름 볼때
        //   type: 'pie',  // 각 별 크기 볼때
        //   type: 'doughnut', // 각 별 크기 볼때
          type: 'radar',
          data: {
            // x축으로 차트의 대상들을 표현
            // 값 표시 갯수는 라벨 수에 의존 한다.
            labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
            datasets: [
                {
                    type:"line",
                    label: '2023년 키 성장',
                    data: [12, 19, 3, 5, 2, 3],
                    borderWidth: 1,
                    backgroundColor: 'yellow'
                }
            ]
        },
          options: {
            scales: {
              y: {
                beginAtZero: true
              }
            }
          }
        });
        */

        // 함수명을 지어주면 가져다가 쓸 수 있다.
        // 옵션 구조를 파악하는 순간 사용법의 대부분을 이해 할수 있다.
        // console.log("라벨 : ",myChart.data.datasets[0].label);
        // console.log("데이터 : ",myChart.data.datasets[0].data); //읽기 가능
        // myChart.data.datasets[0].data = [130,50,40,200,705,100];// 쓰기
        // console.log("데이터2 : ",myChart.data.datasets[0].data); //읽기 가능
       
        // let data2023 ={
        //                     type: "bar",
        //                     label : '2023년 재성 키',
        //                     data : [181,182,183,184,185,186],
        //                     borderWidth : 1
        //               };


        // 7개의 랜덤 데이터를 가진 배열 리턴
        function fRanData(){
            let data = [];
            for(let i=1; i<=7; i++){
                data.push(Math.round(Math.random()*50)+50); //50~100;
            }
            return data;
        }
       
        // 0.5초마다 차트를 그리는 (rendering) 함수
        function fRender(){
            let types = ["bar","line"];
            let colors = ["blue","red"];

            for(let i=0; i<2; i++) {
                let ranData ={
                    type: types[i],
                    label : '2023년 재성 키',
                    data : fRanData(),
                    borderWidth: 1,
                    backgroundColor: 'blue'
                };
                myChart.data.datasets[i]= ranData;
            }
           
            // myChart.data.datasets.push(data2023);
            // 제일 중요한 메소드 update
            myChart.update();   // 다시 그리려면, 멋진 말로 rendering

            setTimeout(fRender,500);
        }

        fRender();  // 콜

      </script>

</body>
</html>