こんにちは、福薗です。
4月から5月にかけて、システムに関する研修を受けさせていただきました。
研修の最後に、学んだことの集大成として最終課題を製作したのですが、その中でレーダーチャートを組み込むシーンがありました。
ん?レーダーチャート…?
どうやって描けばいいんだ…?
そんな悩める私を助けてくれた便利システムが、ありました。
『Chart.js』
使い方を、ちゃーっと、説明したいと思います。
目次/このページでわかること
Chart.jsとは
様々なグラフを簡単に組み込むことができるJavaScriptです。
Chart.jsのTOPページへ
現在(2018年7月時点)での最新バージョンは2.7.2になります。
チャートの種類
Chart.jsは大きく分けて以下の8つのグラフを描写することができます。
・線グラフ
・棒グラフ
・レーダーチャート
・ドーナツと円グラフ
・鶏頭図
・バブルチャート
・散布図
・面グラフ
また、これらを複数組み合わせてグラフを描くこともできます。
Chart.jsの導入方法
まず、公式サイトにアクセスします。
TOPページからGitHubをのページに飛び、

「Clone or download」→「Download ZIP」を選択します。

ダウンロード後解凍し、プロジェクトに設置します。
<script src="Chart.js"></script>
②CDNで提供されているChart.jsを読み込む
下記サイトからCDNで提供されているChart.jsを読み込んでも導入することができます。
https://cdnjs.com/libraries/Chart.js
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.js"></script>
※圧縮版(min)もあります。
Chart.jsの設置方法
Chart.jsはHTML5のcanvasを使って描写します。
描きたい場所に『canvasタグ』とJSで与える『id』、必要に応じて『width』と『height』を指定します。
<canvas id=“graph” width=“300px” height=“300px”></canvas>
これでHTML側の準備はOKです。
Chart.jsの処理の記述
いよいよチャートの内容を書いていきましょう。
それぞれの描きたいチャートのリファレンスを参照して基本的な形を描きます。
今回は実際に課題で使用したレーダーチャートを描きたいと思います。
<script>
    $(function(){
        var drawGraph = function(data){
            var ctx = document.getElementById('graph').getContext('2d');
          // データ1
            var data1 = {
                label:'今日 (%)',
                data:data[1],
                backgroundColor: "rgba(250, 50, 50, 0.3)",
                borderColor: "rgba(200, 50, 50, 0.3)",
                pointHoverBackgroundColor: "rgba(200, 50, 50, 0.3)",
                pointHoverBorderColor: "rgba(200, 50, 50, 0.3)",
            };
          // データ2
            var data2 = {
                label:'昨日 (%)',
                data:data[2],
                backgroundColor: "rgba(50, 50, 250, 0.3)",
                borderColor: "rgba(50, 50, 200, 0.3)",
                pointHoverBackgroundColor: "rgba(50, 50, 200, 0.3)",
                pointHoverBorderColor: "rgba(50, 50, 200, 0.3)",
            }
          // ラベル(横軸)
            var label = data[0];
          // データの設定
            var config = {
                type: 'radar', // グラフの種類(レーダーチャートを指定)
                data: { labels: label, datasets: [data1, data2]},
                // オプション設定
                options: {
                    //凡例の設定
                    legend: {
                      position: 'left',
                    },
                    // レスポンシブ指定
                    responsive: true,
                    //スケールの設定
                    scale: {
                        pointLabels: {
                            fontSize: 15,
                        },
                        ticks: {
                            // 目盛り値のカスタマイズ
                            stepSize: 10,
                            // 最小値の値を0指定
                            beginAtZero:true,
                            min: 0,
                            // 最大値を指定
                            max: 100,
                        }
                    }
                }
            }
          var myChartGraph = new Chart(ctx, config);
        };
        // ラベルの設定
        var data = [['1群', '2群', '3群', '4群', '5群','6群'],
                    [44, 30, 43, 11, 70, 20],
                    [50, 30, 11, 89, 36, 55]]
        drawGraph(data);
    })
    </script>
「//データの設定」の『type』で、チャートの種類を選びます。
レーダーチャートの場合は『radar』と設定します。
「//データ1」「//データ2」のように、反映させるデータを、それぞれどのように表示させるか設定し、「//データの設定」「//ラベルの設定」を行えば基本的な形が描写されます。
これに加えて、「//オプションの設定」にて詳細な描写の設定を行うことができます。
ここに記している他にもカスタマイズすることができるので、リファレンスをご参照ください。
http://www.chartjs.org/docs/latest/charts/radar.htmlhttps://misc.0o0o.org/chartjs-doc-ja/charts/radar.html(日本語)
ちなみに、オプションを反映させるコツはoptions、scale、ticksの順番で囲っていくことです。
私はこれが分からず、解決にとても時間がかかりました。
今回は「//ラベルの設定」に入っている数値がグラフに反映されますが、PHPでデータをもってきて動的なデータを反映させることもできます。
おわりに
以上、Chart.jsの使い方について語ってまいりました。
JavaScriptの扱いはまだまだ未熟な私ですが、そんな私でも扱うことのできる便利なツールです。
一方で、簡単なようですがカスタマイズ性もある、奥深いツールであるように思います。
これを機会にChart.jsを使いこなし、ちゃーっと、チャートを描けるようになりたいと思う今日この頃です。
今回はこの辺で、失礼します。




                                    
                                    
                                    
                                    
                                    
                                            
                                            
                                            
                                            
                                            
                                            
                                            
                                            
                                            
			