以前投稿したグラフ生成のJSライブラリ、
morris.jsを試してみた。
DB(MySQL)に格納されている値を参照して
折れ線グラフを生成させる。
まず、morris.jsのベースは
examplesに入っているdays.htmlを使った。
データサンプルとして東京の過去5日分の
最高気温と最低気温を表示させるとする。
DateT | MaxT | MinT |
---|---|---|
2014/12/22 | 11 | 3 |
2014/12/21 | 13 | 4 |
2014/12/20 | 8 | 3 |
2014/12/19 | 10 | 0 |
2014/12/18 | 8 | -1 |
上記のデータを直書きすれば下記のような感じだ。
<!doctype html> <head> <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> <script src="http://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.2/raphael-min.js"></script> <script src="http://cdnjs.cloudflare.com/ajax/libs/prettify/r224/prettify.min.js"></script> <script src="morris.js"></script> <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/prettify/r224/prettify.min.css"> <link rel="stylesheet" href="morris.css"> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <div id="graph"></div> <script> var day_data = [ {"DateT": "2014-12-22", "MaxT": 11, "MinT": 3}, {"DateT": "2014-12-21", "MaxT": 13, "MinT": 4}, {"DateT": "2014-12-20", "MaxT": 8, "MinT": 3}, {"DateT": "2014-12-19", "MaxT": 10, "MinT": 0}, {"DateT": "2014-12-18", "MaxT": 8, "MinT": -1} ]; Morris.Line({ element: 'graph', data: day_data, xkey: 'DateT', ymax: '15', ymin: '-5', ykeys: ['MaxT', 'MinT'], labels: ['最高気温', '最低気温'], smooth: false, resize: true }); </script> </body>
■サンプルURL
http://516.jp/sample/graph/days.html
上記データがDBに入っているとしてその値をとってくる場合には
{“DateT”: “2014-12-22”, “MaxT”: 11, “MinT”: 3},
{“DateT”: “2014-12-21”, “MaxT”: 13, “MinT”: 4},
{“DateT”: “2014-12-20”, “MaxT”: 8, “MinT”: 3},
{“DateT”: “2014-12-19”, “MaxT”: 10, “MinT”: 0},
{“DateT”: “2014-12-18”, “MaxT”: 8, “MinT”: -1}
と連続している部分をループで処理をすれば良い。
本当はもっと良い書き方があるかもしれないが、
私は素人なので、PHPで下記のような感じで簡単にechoで切り分けた。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="robots" content="noindex,follow"> <title>morrisテスト</title> <script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> <script src="http://cdnjs.cloudflare.com/ajax/libs/raphael/2.1.2/raphael-min.js"></script> <script src="morris.js"></script> <script src="http://cdnjs.cloudflare.com/ajax/libs/prettify/r224/prettify.min.js"></script> <link rel="stylesheet" href="http://cdnjs.cloudflare.com/ajax/libs/prettify/r224/prettify.min.css"> <link rel="stylesheet" href="morris.css"> </head> <body> <?php $con = mysql_connect('ホスト名', 'ユーザー名', 'パスワード'); mysql_select_db("データベース名", $con); $quryset = mysql_query('SET NAMES utf8', $con); $quryset = mysql_query("SELECT * FROM テーブル名"); echo "<div id='graph'></div>"; echo "<script>"; echo "var day_data = ["; while ($data = mysql_fetch_array($quryset)){ echo "{'DateT': '" . $data[0] . "', 'MaxT':" .$data[1] . ", 'MinT':" .$data[2] . "},"; } echo "];"; echo "Morris.Line({"; echo "element: 'graph',"; echo "data: day_data,"; echo "xkey: 'DateT',"; echo "ymax: '15',"; echo "ymin: '-5',"; echo "ykeys: ['MaxT', 'MinT'],"; echo "labels: ['最高気温', '最低気温'],"; echo "smooth: false,"; echo "resize: true"; echo "});"; echo "</script>"; ?> </body> </html>
■サンプルURL
http://516.jp/sample/graph/db.php
配列$data[0]に日付、$data[1]に最高気温、
$data[2]に最低気温が入っている訳です。
morris.jsの注意点というかカスタマイズについては
下記ドキュメントを参考にした。
ピックアップとして2点、
1点目はsmoothをfalseにすると折れ線グラフの滑らかさが消える。
falseにしたほうが見やすいような気がする。
2点目はresizeをtrueにするとブラウザの幅に合わせてレスポンシブになる。
もちろんHTMLにmeta viewportの記述と、cssのmax-widthの変更は必要である。
他にも色々とカスタマイズ出来そうなので
上記ドキュメントを参考にして試してみると面白そうだ。