Quantcast
Channel: teacatcreates: thing
Viewing all articles
Browse latest Browse all 10

Chart.js のグラフを、表(table)の数値に応じて変更するようにしてみました。

$
0
0

グラフを載せる場合、今までは画像で制作していたのですが、
Chart.jsというJSのライブラリで表現できるようになりました。

01
Chart.js を使うとこんなグラフが書けちゃいます。

Chart.js公式サイト
http://www.chartjs.org/

導入方法はこちら等で参照ください

Canvasで超可愛いグラフが作れる!「Chart.js」の紹介 | 株式会社LIG

超cool!!フラットで可愛い動きのチャートがHTML5で作れる「Chart.js」入門ガイド

Modernizr.jsExplorerCanvas.js を使えば、IE7から対応しているのも結構重要な点だったりします。
(一応棒グラフに関してはIE6でも表示を確認しました)

さて、そちらで導入完了し、実際に表示されたものから解説いたします。

実装方法

今回は棒グラフを使用しました。

demoはこちら

 

04

JS

//項目用の配列を定義
var array01 = [];
var array02 = [];
$(function(){
//th用の数値取得
$('#graph01 th').each(function(){
var amount01 = $(this).find('span').text();
array01.push(amount01);
})
//td用の数値取得
$('#graph01 td').each(function(){
var amount02 = $(this).find('span').text() * 100;
array02.push(amount02);
})
});

//Chart.jsの基本設定
var data = {
//th用の数値を反映させるため、配列変数挿入
labels : array01,
datasets : [
{
fillColor : "#0a50a1",
strokeColor : "#0a50a1",
pointStrokeColor : "#fff",
//td用の数値を反映させるため、配列変数挿入
data : array02
}
]
}
//Chart.jsの基本オプション
var option = {
animationEasing : "easeInOutQuart",
animation: Modernizr.canvas,
scaleShowLabels : true,
barValueSpacing : 65
}
$(function(){
new Chart(document.getElementById("demo").getContext("2d")).Bar(data, option);
});

HTML

<div class="wrap">
<p class="attention">単位:百万円</p>
<!-- グラフ用キャンバス要素 -->
<canvas id="demo" height="300" width="600"></canvas>
<!-- 数値用表組み -->
<table id="graph01">
<tr>
	<th><span>2011年</span></th>
	<td><span>250</span>億円</td>
</tr>
<tr>
	<th><span>2012年</span></th>
	<td><span>402</span>億円</td>
</tr>
<tr>
	<th><span>2013年</span></th>
	<td><span>346</span>億円</td>
</tr>
</table>
</div>

解説

Chart.jsがIE7で表示できれば、ほぼ終わったようなものですが、解説します。

tableタグのthとtdにspanタグを入れた上でそれぞれ項目を入力します。

	<th><span>2011年</span></th>
	<td><span>250</span>億円</td>

いったんspanで囲むことにより、「〜億円」のように、項目に他の文言が入っても、欲しい数値だけを分けることができます。

その後、jQueryにてそれぞれの項目を取得し、定義した配列にそれぞれ格納します。

//th用の数値取得
$('#graph01 th').each(function(){
var amount01 = $(this).find('span').text();
array01.push(amount01);
})
//td用の数値取得
$('#graph01 td').each(function(){
var amount02 = $(this).find('span').text() * 100;
array02.push(amount02);
})

後はChart.jsの基本設定内にある、値を設定する部分に先ほどの変数を挿入します。

//th用の数値を反映させるため、配列変数挿入
labels : array01,

 

//td用の数値を反映させるため、配列変数挿入
data : array02

これで完成です。

ちなみにこのまま表の行を増やしても自動的にChart.jsへ反映されますので、メンテナンス性も高いかと。

加えてCMSとも相性良いかと思いますので、コーポレートサイトにも合っていると思います。

IE6だけ未対応ですが、この表組みだと数値も入ってますしIE6なんて化石なんかもういいんじゃないかと。。

IE6なんていらないよっていうクライアントの案件なら、おすすめです!


Viewing all articles
Browse latest Browse all 10

Trending Articles