본문 바로가기
Spring/Spring 기초

e7e샘의 chart.JS

by 미눅스[멘토] 2023. 9. 4.
728x90

https://www.chartjs.org/

 

 

 

 

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!--바닐라 JS로 맹글어져성, 아래 1줄로 설치 끝!-->
    <script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>

<body>

    <h1>올해 수지 맞은 차트</h1>
    작년 값<input type="text" id="lastVal" value=""><br>
    올해 값<input type="text" id="thisVal" value=""><br>
    <button onclick="freDraw()">차트 다시 그리깅</button>


    <div style="width:600px; height:400px; border:2px solid black">
        <!--canvas는 webGL이라고 그래픽라이브러리 엔진을 사용!
            차트 크기는 부모영역 크기에 따라 자동으로 달라짐,
        -->
        <canvas id="myChart"></canvas>
    </div>

    <script>
       
        const myLastVal = document.querySelector('#lastVal');
        const mythisVal = document.querySelector('#thisVal');

        function fRanData(){
            let ranData = []; //빈 배열 생성
            for(let i=1; i<=7; i++){ //7개 랜덤 데이터 넣기
                ranData.push(Math.round(Math.random()* 40) + 60); //60~100
            }
            return ranData; //배열 리턴
        }
       
        function freDraw() {
            //요기 작성

            sujiChart.data.labels = ['임민우', '곽우재','김수지', '김승종', '이현학', '박병철', '신진수']
            sujiChart.data.datasets[0].data = fRanData();
            sujiChart.data.datasets[1].data = fRanData();
            sujiChart.update(); //잊지말자 다시그리기
            setTimeout(freDraw,1000);
        }


        const ctx = document.querySelector('#myChart');

        //bar와 line은 mix될 수 있음. (딴 건 안됨!, 생각해보면 안되는 이유 추측가능)
        //chart.js가 잘 만들어진 이유는 생성자 리턴값에 설정옵션들이 거의다
        //포함되어서 리턴되고, 그것으로 모든 걸 제어할 수 있음!(아주 훌륭!)
        const sujiChart = new Chart(ctx, {
            type: 'bar', //bar, line, doughnut, pie, radar, polarArea
            data: {
                // labels 갯수가 맞아야만 해당 데이터가 화면에 나옴!
                labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange','Merong'],
                datasets: [
                    {
                        type:"line",
                        label: '작년',
                        data: [12, 19, 3, 5, 2, 3,20],
                        borderWidth: 1
                    },
                    {
                        type:"bar",
                        label: '올행',
                        data: [22, 29, 13, 15, 12, 13, 16],
                        borderWidth: 1
                    },
                ]
            },
            // 필요한 옵션은 구글 검색을 통해 해결!
            options: {
                scales: {
                    y: {
                        beginAtZero: true
                    }
                }
            }
        });

        //sujiChart 전역변수를 이용하여 차트 내부 정보를 읽어올 수 있음!
        console.log("체킁 :", sujiChart.data.labels);
        console.log("체킁2 :", sujiChart.data.datasets[1]);
        console.log("체킁3 :", sujiChart.data.datasets[1].data);

        //값을 바로 줄 수 있음!
        //sujiChart.data.datasets[1].data = [1,2,3,4,5,6,7];

        //chart.js의 가장 중요하나 메소드 update() => 다시 그려랑(rendering)
        //sujiChart.update();



    </script>
</body>

</html>