グラフを描画するには、canvas要素に「四角形を描く」や「線を描く」等で紹介したメソッドを使って地道に書いていくか、ライブラリを使います。
ライブラリの説明はそれぞれのサイトをご覧下さい。
RGraph
html5.jp
マウスを乗せるとグラフを描画します。
<canvas id="drawGraphCanvas1" onmouseover="drawGraph1();" style="border: 1px solid;" width="400" height="300">
</canvas>
<script language="Javascript" type="text/javascript">
function drawGraph1() {
var c = document.getElementById("drawGraphCanvas1");
var context = c.getContext("2d");
// プロットデータ
var month = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
var attendance = [3, 5, 4, 7, 9, 5, 11, 13, 15, 20, 19, 22];
var attendanceMax = 22; // attendanceの最大値
var originalPoint = 50; // 原点座標
var barInterval = 20; // 棒グラフの間隔
var graphHeight = c.height - originalPoint; // グラフの高さ取得
var graphWidth = c.width - originalPoint; // グラフの幅取得
// 1メモリの高さ
var memHeight = Math.floor(graphHeight / attendanceMax);
// 棒グラフの幅
var barWidth = (graphWidth - barInterval * month.length) / month.length;
// X軸を描画
context.moveTo(originalPoint, graphHeight);
context.lineTo(graphWidth + originalPoint, graphHeight);
context.strokeStyle = "#121212";
context.stroke();
// Y軸を描画
context.moveTo(originalPoint, 0);
context.lineTo(originalPoint, graphHeight);
context.stroke();
// 棒グラフを描画
var x = originalPoint + barInterval;
var i = 0;
for( i = 0 ; i < month.length ; i++) {
context.fillStyle = "#FF1212";
context.fillRect(x, graphHeight - (memHeight * attendance[i])
, barWidth, memHeight * attendance[i]);
context.fillStyle = "#000000";
context.fillText(attendance[i], x, graphHeight - (memHeight * attendance[i]) - 3);
context.strokeStyle = "#FF0000";
context.stroke();
context.fillStyle = "#121212";
context.fillText(month[i] + "月", x, graphHeight + 15);
x += barInterval + barWidth;
}
// メモリを描画
var y = graphHeight - memHeight;
for( i = 0 ; 0 < y ; i++) {
context.strokeStyle = "#696969";
context.moveTo(originalPoint, y);
context.lineTo(graphWidth + originalPoint, y);
context.stroke();
if ( (i + 1) % 5 == 0 ) {
context.fillStyle = "#000000";
context.fillText(i + 1, originalPoint - 20, y);
}
y -= memHeight;
}
}
</script>
0 件のコメント:
コメントを投稿