【Laravel】googleチャートでデータをグラフ出力してみる

PHP

はじめに

Laravelでグラフ出力をしてみます。
グラフ出力も様々な方法があります。
個人的にchart.jsは使用した事がある為、googleチャートを試してみました。

手順

わかりやすくする為、Viewのみでグラフ表示を行ってみます。
Viewのみで完成してイメージを掴めれば、コントローラー側からそのデータを渡すように変更すればいいと思います。
今回は以下のような複合的なグラフを作っていきます。

棒グラフは積み上げ式(青と赤の部分)、そこに折れ線グラフも追加します。

googleチャートのローダーを指定

<script src="https://www.gstatic.com/charts/loader.js"></script>

パッケージのロードを行う

google.charts.load('current', {packages: ['corechart']});

ロード完了まで待機

google.charts.setOnLoadCallback(drawChart);

データの準備

var data = google.visualization.arrayToDataTable([
                ['年齢', '終身保険', '定期保険','不足金額'],
                ['55',  500 , 3000 , 3100],
                ['56',  500 , 3000 , 3800],
                ['57',  500 , 3000 , 2900],
                ['58',  500 , 3000 , 2500],
                ['59',  500 ,    0 , 2300],
                ['60',  500 ,    0 , 2100],
                ['61',  500 ,    0 , 1900]
]);

データ1行目がヘッダー、それ以降は4列の項目でデータを作成。

オプション設定

var options = {
                title: '保険の年間推移 ( 単位:万円 )',
                seriesType: "bars",
                isStacked: true,
                series: {2: {type: "line"}}
};

seriesType:棒グラフなのでbarsを指定します。
折れ線グラフはline、面積グラフはareaを指定します。

isStacked:棒グラフの積み上げはtrue。
積み上げしない場合はfalseまたはinStackedオプションを削除します。

series:一部折れ線グラフの指定をします。
ゼロから始まるデータ部の2番目をグラフlineで指定しています。

インスタンス化と描画

var chart = new google.visualization.ComboChart(document.getElementById('target'));
chart.draw(data, options);

まとめ

最終的には以下のようなコードになりました。
このままViewへ貼り付けて動作すると思います。

<head>
  <title>GoogleChartのテスト</title>
</head>
<body>
  <div id="target"></div>
  <script src="https://www.gstatic.com/charts/loader.js"></script>
  <script type="text/javascript">
        // パッケージのロード
        google.charts.load('current', {packages: ['corechart']});
        // ロード完了まで待機
        google.charts.setOnLoadCallback(drawChart);

        // コールバック関数の実装
        function drawChart() {
            // データの準備
            var data = google.visualization.arrayToDataTable([
                ['年齢', '終身保険', '定期保険','不足金額'],
                ['55',  500 , 3000 , 3100],
                ['56',  500 , 3000 , 3800],
                ['57',  500 , 3000 , 2900],
                ['58',  500 , 3000 , 2500],
                ['59',  500 ,    0 , 2300],
                ['60',  500 ,    0 , 2100],
                ['61',  500 ,    0 , 1900]
            ]);
            // オプション設定
            var options = {
                title: '租税の年間推移 ( 単位:兆円 )',
                seriesType: "bars",
                isStacked: true,
                series: {2: {type: "line"}}
            };

            // インスタンス化と描画
            var chart = new google.visualization.ComboChart(document.getElementById('target'));
            chart.draw(data, options);
        }
 </script>
</body>
</html>

コメント