Chart.jsとは
グラフ描画JavaScriptライブラリ。定期的に更新する必要のあるグラフは画像ではなくChart.jsでグラフ描画すると更新の手間が減少する。
Chart.jsの使い方
HTMLファイル内にidの付いたcanvasタグを記述してCDNでChart.min.jsを読み込む。
<canvas id="myChart"></canvas> <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.1/Chart.min.js"></script>
あとはグラフを描画するJSを下記のように記述するだけだ。
0票のように単位を付ける場合はオプションのcallbackで追加する。
var ctx = document.getElementById('myChart'); var myChart = new Chart(ctx, { type: 'bar', data: { labels: ['赤党', '緑党', '青党'], datasets: [{ label: '投票数', data: [10000, 5000, 7000], backgroundColor: [ 'rgba(255, 0, 0, 0.2)', 'rgba(0, 255, 255, 0.2)', 'rgba(0, 0, 255, 0.2)' ], borderColor: [ 'red', 'green', 'blue' ], borderWidth: 1 }] }, options: { scales: { yAxes: [{ ticks: { beginAtZero: true, callback: function(val) { return val + '票'; } } }] } } });
棒グラフ、折れ線グラフ、円グラフなど8種類ある。
基本的にグラフは0からはじめるものが多いので、見やすいようオプションのbeginAtZero: trueは常に付ける。
円グラフを描画する
円グラフに変更したい場合はtypeをpieにする。
デフォルトだと円グラフのツールチップは設定したdataの数値を表示するが、円グラフの場合は%を使用したほうが都合が良いことが多いのでoptionsのtooltipsに下記のように設定しておくと良い。
ちなみに円グラフでbeginAtZeroは使用できない。
var ctx = document.getElementById('myChart'); var myChart = new Chart(ctx, { type: 'pie', data: { labels: ['赤党', '緑党', '青党'], datasets: [{ label: '投票数', data: [10000, 5000, 7000], backgroundColor: [ 'rgba(255, 0, 0, 0.2)', 'rgba(0, 255, 255, 0.2)', 'rgba(0, 0, 255, 0.2)' ], borderColor: [ 'red', 'green', 'blue' ], borderWidth: 1 }] }, options: { tooltips: { callbacks: { label: function(item, data) { var dataset = data.datasets[item.datasetIndex]; var total = dataset.data.reduce(function(prev, current) { return prev + current; }); var current = dataset.data[item.index]; var percentage = Math.floor(((current / total) * 100) + 0.5); return percentage + "%"; } } } } });
折れ線グラフを描画する
グラフはtypeを変更することで形式を変更できる。折れ線グラフに変更したい場合はtypeをlineにする。
棒グラフと異なり、折れ線グラフは1項目に複数のデータが必要なのでdatasetsを配列で下記のように分ける。
折れ線グラフが曲線で背景色が付いていると見づらいのでlineTension: 0, fill: falseで直線にして透過すると見やすくなる。
var ctx = document.getElementById('myChart'); var myChart = new Chart(ctx, { type: 'line', data: { labels: ['投票2015', '投票2016', '投票2017'], datasets: [{ label: '赤党', data: [9000, 5000, 10000], borderColor: 'red', lineTension: 0, fill: false }, { label: '緑党', data: [6000, 7000, 3000], borderColor: 'green', lineTension: 0, fill: false }, { label: '青党', data: [1000, 3000, 7000], borderColor: 'blue', lineTension: 0, fill: false }] }, options: { scales: { yAxes: [{ ticks: { beginAtZero: true, callback: function(val) { return val + '票'; } } }] } } });
Chart.jsのアニメーション停止
いずれのグラフはいずれも動いているが、基本的にグラフにアニメーションは不要なのでoptionsにanimation: falseを指定して停止させた方が良いだろう。
var ctx = document.getElementById('myChart'); var myChart = new Chart(ctx, { type: 'line', data: { labels: ['投票2015', '投票2016', '投票2017'], datasets: [{ label: '赤党', data: [9000, 5000, 10000], borderColor: 'red', lineTension: 0, fill: false }, { label: '緑党', data: [6000, 7000, 3000], borderColor: 'green', lineTension: 0, fill: false }, { label: '青党', data: [1000, 3000, 7000], borderColor: 'blue', lineTension: 0, fill: false }] }, options: { animation: false, scales: { yAxes: [{ ticks: { beginAtZero: true, callback: function(val) { return val + '票'; } } }] } } });