Chart.jsを使いグラフを表示してみる
Webサイトにグラフを簡単に表示出来る、便利なJSライブラリーChart.jsを紹介!!
私がリリースしている下記のアプリ[ローン返済ナビゲーションcannavi]でも、残高の進捗を表現するのにChart.jsを使用しています。
[appbox appstore 1059372889 screenshots-only]
ちなみに今回使用しているバージョンは以下の通りです。
Chart.js: v1.0.2
Chart.jsの使い方
まずはChart.jsのサイトへ行き、一式ダウンロードしてきましょう。
使用するのはChart.jsファイルのみです。
もしくはCDNへも公開されてますので、リンクを張っても良いかと。
1 2 3 | <script src="script/Chart.js"></script> //もしくは <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/1.0.2/Chart.min.js"></script> |
使い方はとっても簡単です。
まずはHTMLの表示したい箇所に、canvasタグを用意します。idや幅高さは任意で。
1 | <canvas id="mycanvas" height="600" width="400"></canvas> |
JavaScriptでは下記のグラフの種類とデータ、オプションを指定します。
グラフの種類(6種類)
- Doughnut:ドーナッツグラフ
- Bar:縦棒グラフ
- Line:折れ線グラフ or 面グラフ
- Radar:レーダーチャート
- PolarArea:変わった円グラフ(名称が分かりません。。)
- Pie:円グラフ
グラフのデータ(ドーナッツグラフの場合)
- value:個々の値
- color:塗りつぶす色
- highlight:マウスオーバー時の色
- label:項目名
グラフのオプション
沢山ある為割愛しますが、アニメーションのイージングや点の大きさなど色々と指定出来ます。
実際のソースが以下になります。(ドーナッツグラフの場合)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | var data = [ { value: 300, color:"#F7464A", highlight: "#FF5A5E", label: "Red" }, { value: 50, color: "#46BFBD", highlight: "#5AD3D1", label: "Green" }, { value: 100, color: "#FDB45C", highlight: "#FFC870", label: "Yellow" } ]; var myChart = new Chart(document.getElementById("mycanvas").getContext("2d")).Doughnut(data); |
ちなみに今回のデモは、下記の様にしてオプションを指定して可変(レスポンシブ対応)にしております。
なんと!このオプションを指定すれば、canvas自体の大きさも自動で変更してくれます。便利☆
1 | var myChart = new Chart(document.getElementById("mycanvas").getContext("2d")).Doughnut(data,{responsive:true}); |
それでは下の画像をクリックしてDEMOを見てみてください。
いかがでしょうか。こんなに簡単にアニメーションの付いたグラフが表示できました。
その他のグラフも紹介します。
Bar:縦棒グラフ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | var data = { labels: ["1月","2月","3月","4月","5月","6月","7月"],//X軸のラベル datasets: [ { label: "My First dataset",//項目名 fillColor: "rgba(220,220,220,0.5)",//塗りつぶす色 strokeColor: "rgba(220,220,220,0.8)",//枠線の色 highlightFill: "rgba(220,220,220,0.75)",//マウスオーバー時塗りつぶす色 highlightStroke: "rgba(220,220,220,1)",//マウスオーバー時枠線の色 data: [65, 59, 80, 81, 56, 55, 40]//値 }, ... ... ... ] }; var myChart = new Chart(document.getElementById("mycanvas").getContext("2d")).Bar(data); |
Line:折れ線グラフ
オプションの指定によって、曲線を直線にしたり、面を塗らない様にしたりできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | var data = { labels: ["1月","2月","3月","4月","5月","6月","7月"],//X軸のラベル datasets: [ { label: "My First dataset",//項目名 fillColor: "rgba(220,220,220,0.2)",//塗りつぶす色 strokeColor: "rgba(220,220,220,1)",//線の色 pointColor: "rgba(220,220,220,1)",//値の点を塗りつぶす色 pointStrokeColor: "#fff",//値の点の枠線の色 pointHighlightFill: "#fff",//マウスオーバー時値の点を塗りつぶす色 pointHighlightStroke: "rgba(220,220,220,1)",//マウスオーバー時値の点の枠線を塗りつぶす色 data: [65, 59, 80, 81, 56, 55, 40]//値 }, ... ... ... ] }; var myChart = new Chart(document.getElementById("mycanvas").getContext("2d")).Line(data); |
Radar:レーダーチャート
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | var data = { labels: ["Eating", "Drinking", "Sleeping", "Designing", "Coding", "Cycling", "Running"],//カテゴリー名 datasets: [ { label: "My First dataset",//項目名 fillColor: "rgba(220,220,220,0.2)",//塗りつぶす色 strokeColor: "rgba(220,220,220,1)",//線の色 pointColor: "rgba(220,220,220,1)",//値の点を塗りつぶす色 pointStrokeColor: "#fff",//値の点の枠線の色 pointHighlightFill: "#fff",//マウスオーバー時値の点を塗りつぶす色 pointHighlightStroke: "rgba(220,220,220,1)",//マウスオーバー時値の点の枠線を塗りつぶす色 data: [65, 59, 90, 81, 56, 55, 40]//値 }, ... ... ... ] }; var myChart = new Chart(document.getElementById("mycanvas").getContext("2d")).Radar(data); |
PolarArea:変わった円グラフ
1 2 3 4 5 6 7 8 9 10 11 12 13 | var data = [ { value: 300, color:"#F7464A", highlight: "#FF5A5E", label: "Red" }, ... ... ... ]; var myChart = new Chart(document.getElementById("mycanvas").getContext("2d")).PolarAres(data); |
Pie:円グラフ
1 2 3 4 5 6 7 8 9 10 11 12 13 | var data = [ { value: 300, color:"#F7464A", highlight: "#FF5A5E", label: "Red" }, ... ... ... ]; var myChart = new Chart(document.getElementById("mycanvas").getContext("2d")).Pie(data); |
まとめ
各グラフのデータやオプションの指定は様々なので、公式サイト(英語)を見てください。
ちなみにこのデモの様にブログ上に表示させる方法は、[WordPress:特定の記事の中でThree.jsを使う方法]を応用しています。
次回はもっと掘り下げて、MonacaのベースでもあるAngular JSと組み合わせ動的にグラフを変更してみたいと思います。