Chart.js에서 가로 막대를 표시하는 샘플

Chart.js + chartjs-plugin-annotation을 기본 html / js에서 호출합니다.



원래



업무상 Chart.js 을 사용하고 있어, y축 방향으로 선을 표시하고 싶지만 아무것도 가지 않으면 상담되었으므로, 그럼 최소한의 코드를 써 보려고 했습니다.

조건



업무에서 사용하고 있던 Chart.js는 v2.9.2이었습니다만, 이 샘플에서는 별로 신경쓰지 않고 v2.9계 마지막의 v2.9.4를 지정하고 있습니다.
결합하는 것은, 넷상의 정보를 종합해, chartjs-plugin-annotation 의 v0.5.7 을 조합하고 있습니다.
버전 차이를 결합하여 잘 작동하지 않는 것 같습니다.

코드



베이스로 한 것은 Getting Started | Chart.js 에 있는 코드입니다.

index_cdn.html
<html>
<head>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/Chart.bundle.min.js" integrity="sha256-eA+ych7t31OjiXs3fYU0iWjn9HvXMiCLmunP2Gpghok=" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/[email protected]/chartjs-plugin-annotation.min.js" integrity="sha256-Olnajf3o9kfkFGloISwP1TslJiWUDd7IYmfC+GdCKd4=" crossorigin="anonymous"></script>
</head>
<body>
<canvas id="canvas"></canvas>
<script>
    //window.onload = function () {
        var ctx = document.getElementById('canvas').getContext('2d');
        var myChart = new Chart(ctx, {
            // The type of chart we want to create
            type: 'line',

            // The data for our dataset
            data: {
                labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July'],
                datasets: [{
                    label: 'My First dataset',
                    backgroundColor: 'rgb(255, 99, 132)',
                    borderColor: 'rgb(255, 99, 132)',
                    fill: false,
                    data: [0, 10, 5, 2, 20, 30, 45]
                }]
            },

            // Configuration options go here
            options: {
                annotation: {
                    drawTime: 'afterDatasetsDraw',
                    annotations: [
                        {
                            id: 'hline',
                            type: 'line',
                            mode: 'horizontal',
                            scaleID: 'y-axis-0',
                            value: 15,
                            borderColor: 'black',
                            borderWidth: 2,
                            label: {
                                backgroundColor: "red",
                                content: "Test Label",
                                enabled: true
                            },
                        },
                    ]
                }
            }
        });

    //}

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


options의 부분을 덧붙여, chartjs-plugin-annotation 에 얽힌 정의를 더하고 있습니다.
빠진 것은 scaleID의 기술로, 문서상의 기술을 찾을 수 없습니다만 암묵적으로 (?)y축을 나타내는 ID가 정해져 있는지, 「scaleID: 'y-axis-0'」 쓸 때까지 전혀 가로 막대를 표시할 수 없었습니다.

실행 결과




html이 적당하기 때문에, 옆에 튀어 나와 버리고 있기 때문에, 제대로 canvas 요소를 div 요소로 묶어 말하는 이야기.

참고 정보



【Nuxt.js】Chart.js에서 그래프에 테두리를 그린다(chartjs-plugin-annotation)
이 예제에서는 scales > yAxes > id를 명시하고 annotation > annotations > scaleID를 명시합니다. (지금 설명을 쓰고 있는 시점에서 알지만, 조사하고 있는 중에는 좀처럼 눈치채지 못했다.)

Chart.js에서 선 그래프로 세로 막대를 쓰는 방법 - Qiita
세로 막대이지만, 요점은 같습니다. x←→y, vertical←→horizontal조차 알아차리면.

좋은 웹페이지 즐겨찾기