スクリーンショット_2018-11-02_21

Chart.jsを使って、Webアプリ内にグラフを描画する

簡単なデータを自前のWebアプリで表示したいというときに、いわゆるダッシュボード系のサービスだと難しそうということで、今回はChart.jsで描画してみました。やってみたことを記録として残しておきます。

Chart.jsはOSSのJavaScriptのライブラリで、CSS等のデザイン周りを気にせずに、データを投入するだけでグラフを作成することができます。
今回初めて利用しましたが「Simple yet flexible JavaScript charting for designers & developers」と紹介されている通り、とてもシンプルなコードで利用できました。
(利用にあたっての具体的なドキュメントはこちら。)

npmでのインストールもできますが、今回はCDNからのダウンロードで対応します。このページからバージョンや取得先を設定します。今回は最新(2018年11月現在)の軽量バージョンを取得します。

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.3/Chart.min.js"></script>

次にhtml側にグラフを表示するコンポーネントを追加します。
これもシンプルで、canvasタグを追加するだけです。idに関してはjs側で利用しますが、双方で一致していればどのような命名でもよいです。

<canvas id="myChart"></canvas>

私はjsのソースについてはVue.jsを利用しています。が、JavaScriptいう意味では同じなので、公式ドキュメントのソースを利用することで表示可能です。そのまま引用します。

var ctx = document.getElementById('myChart').getContext('2d');
var chart = 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)',
            data: [0, 10, 5, 2, 20, 30, 45],
        }]
    },
});

すると、下記のようなグラフが作成されます。

ソースも一回見れば何を設定しているかわかるくらいシンプルで、
・type:グラフの種類を指定します。lineの場合は折れ線グラフ、barは棒グラフ(horizontalBarだと横の棒グラフ)などになります。
・labels:横軸の項目になります。配列で渡すことでいい感じに配置してくれます。
・borderColor、backgroundColor:グラフの線の色と塗りつぶしの色の指定項目になります。
(塗りつぶさない場合には、fill: false を追加します)
・data:グラフにする値を配列で渡します。
という感じです。
今回はGoogle Analyticsから取得した値でグラフ化します。
(開発中のサービスなので、アクセス数が極端ですが…)
dataの各値に関する処理は省略していますが、mountedで渡しています。

var app = new Vue({
    el: '#app',
    data: {
        labelData: [],
        chartData: [],
    }, methods: {
        makeDailyPageView: function () {
            var ctx = document.getElementById("myChart").getContext('2d');
            var myChart = new Chart(ctx, {
                type: 'line',
                data: {
                    labels: this.labelData,
                    datasets: [{
                        label: '予約ページのアクセス数',
                        borderColor: "rgba(0,153,255,1)",
                        data: this.chartData,
                        backgroundColor: "rgba(54, 162, 235, 0.2)"
                    }]
                }
            });
        },
    }
});

サイトの紹介も兼ねて画面を紹介すると、こんな感じで出力されます。

塗りつぶしをなしにするとこんな感じです。
(先程書いた、fill: false をdatasets内に追加した場合です)

どちらも同じデータを利用したグラフですが、切り替えも設定一つでできて使うのにとても簡単です。Webアプリでグラフを描画する際の候補としていかがでしょうか。

いいなと思ったら応援しよう!