HPやブログなどでグラフ表示が必要な場合は、迷わずchart.jsを使用することをお勧めします。
どんなに簡単にグラフ表示が出来るか例題を作って説明します。
例題の内容
今回は、chart.jsを使用したベスト10+圏外の「日々のランキング」1週間分の遷移をグラフ化してみます。
X(横)軸は日付で値は、11/1 ~11/7
Y(縦)軸はランキングで値の範囲は、1(位)~10(位) と11(圏外)のみ
を想定します。
例とするデータは、
日付(X) | Aの順位(Y) | Bの順位(Y) |
---|---|---|
11/1 | 11(圏外) | 2 |
11/2 | 8 | 6 |
11/3 | 4 | 9 |
11/4 | 2 | 11(圏外) |
11/5 | 1 | 11(圏外) |
11/6 | 3 | 6 |
11/7 | 7 | 3 |
とします。
ランキングの遷移で、横軸は、定間隔なので「線グラフ」にします。
グラフ表示に必要な構成
Javascript であるchart.jsを読み込む部分
ダウンロードしてサーバーにアップロードしたものを読み込むのも良いのですが、今回は簡単に提供サイトから直接読み込みます。
そのソースは、
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.js"></script>
このたった1行です。
グラフの描画エリア
グラフを描画する場所(タグ)を指定します。
そのソースは、
<canvas id="Chart1" style="max-width: 600px;margin: auto;"></canvas>
このたった1行です。
グラフ本体プログラム
グラフ本体のプログラムでJavascriptで記述します。
大まかに分けると次の4つで構成します
1.Chartクラスの定義とインスタンス化部分
2.グラフのタイプ
3.データセット
4.オプションズ
var ctx = document.getElementById("Chart1"); var Chart1 = new Chart(ctx, { type: 'グラフのタイプ', data: データセット, options: オプションズ, });
Chartクラスの定義とインスタンス化部分
描画エリアへ渡すChart1を作ります。
ソースコードは、
var ctx = document.getElementById("Chart1"); または、 var ctx = document.getElementById("Chart1").getContext("2d"); または、 var ctx = $("#Chart1"); または、 var ctx = "Chart1";
今回使用したのは1行目です。
グラフのタイプ指定
大まかなパラメータ群の1つで「type」です。
グラフの形を指定します。
line = 線グラフ
bar = 棒グラフ
radar = レーダーグラフ
doughnut = ドーナツ型グラフ
pie = 円グラフ
polarArea = 鶏頭図
bubble = バブルグラフ
scatter = 散布図
で例題の「線グラフ」だとソースコードは、
type: 'line'
となります。
データセット
これも大まかなパラメータ群の1つで「data」です。
グラフのデータを指定します。
指定方法にNumberタイプとPointタイプが有ります
Numberタイプデータ指定
Numberタイプは、X軸をカテゴリ軸として指定します。
配列labelsが、X軸の目盛りになります。
Y軸データは、Datasetsになります。
内容は、
label: '曲線の名称'
data:へ、Y軸の値をカテゴリ分の配列として記述します。
ソースコードは、
data{ labels: ['11/1', '11/2', '11/3', '11/4', '11/5', '11/6', '11/7'], datasets: [ { label: '順位', data: [11, 8, 4, 2, 1, 3, 7] } ] }
複数の項目(曲線)を表示するには、
このlabelとデータを{}で囲んだものをカンマで区切り、項目の数だけ並べます。
例題ではこのNumberタイプで2つのデータを使用します。
Pointタイプデータ指定
Pointタイプは、
X,Yペアで、座標ポイントとし指定します。
ソースコードは、
data{ datasets:[ { label: '順位', data: [ { x: 10, y: 14 }, { x: 20, y: 28 } ] } ] }
このような感じです。
Numberタイプと同様、複数の項目(曲線)を表示するには、
このlabelとデータを{}で囲んだものをカンマで区切り、項目の数だけ並べます。
オプションズ
これも大まかなパラメータ群の1つで「options」です。
グラフのタイトル、
グラフの目盛り振り方、
グリッドの色、
線の描画方法など細かい設定が可能です。
ソースコードは、
options: { title: { display: true, text: '人気ランキング遷移' }, scales: { xAxes: [{ // X軸 gridLines: { // 補助線 color: "rgba(255, 0, 0, 0.2)", // 補助線の色 zeroLineColor: "black" // x=0(縦線の色) } }], yAxes: [{ // Y軸 gridLines: { // 補助線 color: "rgba(0, 0, 255, 0.2)", // 補助線の色 zeroLineColor: "black" // y=0(横線の色) }, ticks: { // 目盛り reverse: true, Max: 11, Min: 1, stepSize: 1, callback: function(value, index, values){ if(value == 0){ label = "" } else if(value <= 10){ label = value + '位' } else if(value == 11){ label = "圏外" } else{ label = "" } return label } } }] } }
ランキングなので小さな値を上にする(1位が上)ために
「reverse」をtrueにしています。
目盛りの設定 はCallBack関数を用いて
順位の値が0の時は、未表示
順位の値が1~10の時は、順位の値に「位」を付けて表示
順位の値が11の時は、「圏外」を表示
順位の値が上記以外の時は、未表示
と言うように細かく設定できます。
CallBack関数内の条件文でも例外ではなく不具合の要因になります。「&」文字は、使わないようにしましょう。「|」文字(or条件記号)は、大丈夫です。
例題に沿った実際のソースコード
これまでの説明を盛り込んだグラフ表示に必要な実際のソースコードは、
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.2/Chart.bundle.js"></script> <canvas id="Chart1" style="max-width: 600px;margin: auto;"></canvas> <script> var ctx = document.getElementById("Chart1"); var Chart1 = new Chart(ctx, { type: 'line', data: { labels: ['11/1', '11/2', '11/3', '11/4', '11/5', '11/6', '11/7'], datasets: [ { label: 'Aの順位', data: [11, 8, 4, 2, 1, 3, 7], borderColor: "rgba(0,127,0,1)", backgroundColor: "rgba(0,0,0,0)" }, { label: 'Bの順位', data: [2, 6, 9, 11, 11, 6, 3], borderColor: "rgba(255,0,0,1)", backgroundColor: "rgba(0,0,0,0)" } ], }, options: { title: { display: true, text: '人気ランキング遷移' }, scales: { xAxes: [{ // X軸 gridLines: { // 補助線 color: "rgba(255, 0, 0, 0.2)", // 補助線の色 zeroLineColor: "black" // x=0(縦線の色) } }], yAxes: [{ // Y軸 gridLines: { // 補助線 color: "rgba(0, 0, 255, 0.2)", // 補助線の色 zeroLineColor: "black" // y=0(横線の色) }, ticks: { // 目盛り reverse: true, Max: 11, Min: 1, stepSize: 1, callback: function(value, index, values){ if(value == 0){ label = "" } else if(value <= 10){ label = value + '位' } else if(value == 11){ label = "圏外" } else{ label = "" } return label } } }] }, } }); </script>
になります。
グラフを描画
実際にこの場所にソースコードを展開して、グラフを描いてみます。
このように表示されます。
chart.jsでランキング遷移グラフを表示するまとめ
簡単に、本格的なグラフを描くことが出来ました。
ランキング遷移グラフなら、このソースコードをコピぺして、
データとラベル部分を書き換えれば、あっという間にグラフが完成してしまいます。
このchart.jsによるランキング遷移グラフは、このサイトの以下の関連記事のなかでも応用しています。