Highchartsは、Webでグラフを描写するためのJavaScriptライブラリです。Highchartsはここからダウンロードできます。このHighchartsを使って、センサー取得した環境データ(温湿度データ、気圧データ)を表示させます。Highchartsを使用して作成したグラフを次に示します。
- 気温(線グラフ)、湿度(線グラフ)、気圧(棒グラフ)の各データをグラフ表示します
- 縦軸に気温、湿度、気圧の各メモリ、横軸に24時間表示を行います
- グラフのタイトルとサブタイトルを表示します
- 左上に凡例を表示します。
- マウスによりグラフの一部にカーソルを置くと、Tooltipによりその位置の気温、湿度、気圧データ値を表示します。
- 表示する気温、湿度、気圧の各センサ情報は、Ajaxによりデータベースにより取得します。
- 二つのボタンを画面の右上に貼り付けて、「今日」、「昨日」とします。
Highchartsを使った簡単な表示
次に示すコードでHighchartsを使った簡単なグラフが表示できます。
<!doctype html>
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Test Display</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
<script>
$(function(){
var options = {
chart: {
renderTo: 'container',
},
title: {
text: 'Title'
},
subtitle: {
text: 'SubTitle'
},
xAxis: [{
title: {
text: '時刻',
},
categories: ['00:00', '01:00', '02:00', '03:00', '04:00', '05:00' ],
}],
yAxis: [{ // Primary yAxis
title: {
text: '気温',
}
}],
series: [{
name: '気温',
type: 'spline',
data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5],
tooltip: {
valueSuffix: ' ℃'
}
}]
};
var chart = new Highcharts.Chart(options);
});
</script>
</head>
<body>
<ul id="container"></ul>
</body>
</html>
このJavascriptを実行すると、次のグラフが表示されます。
気温、湿度、気圧データの3種類のデータの表示
次のスクリプトを追加すると、気温、湿度、気圧データの3種類のデータが表示されます。「type」にはグラフの種類を設定し、その内容を次に示します。「data」には、取得したセンサー値を設定します。
| Type | グラフの種別 |
|---|---|
| line | 折れ線 |
| spline | 曲線 |
| area | 折れ線の下ぬりつぶし |
| areaspline | 曲線の下ぬりつぶし |
| column | 棒グラフ・縦 |
| bar | 棒グラフ・横 |
| pie | 円グラフ |
| scatter | 散布図 |
series: [{
name: '気圧',
type: 'column',
data: [1016, 1016, 1015.9, 1015.5, 996.3, 1009.5]
}, {
name: '湿度',
type: 'spline',
data: [45.9, 71.5, 50.4, 50.2, 55.0, 60.0]
}, {
name: '気温',
type: 'spline',
data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5]
}]
y軸への気温、湿度、気圧の目盛表示
次のスクリプトを追加すると、y軸へ気温、湿度、気圧の目盛が表示されます。湿度、気圧は、「opposite: true」となっているので、右側に目盛が作られます。メモリの上限と下限は、「ceiling」と「floor」で指定されます。
yAxis: [{
title: {
text: '気温',
},
labels: {
format: '{value}℃',
},
ceiling: 35,
floor: -10
}, { // Secondary yAxis
gridLineWidth: 0,
title: {
text: '湿度',
},
labels: {
format: '{value} %',
},
ceiling: 90,
floor: 40,
opposite: true
}, { // Tertiary yAxis
gridLineWidth: 0,
title: {
text: '気圧',
},
labels: {
format: '{value} mb',
},
ceiling: 1030,
floor: 990,
opposite: true
}],
凡例の作り方
次のスクリプトを追加すると、凡例が画面の左上に表示されます。
legend: {
layout: 'vertical',
align: 'left',
x: 80,
verticalAlign: 'top',
y: 35,
floating: true,
backgroundColor: (Highcharts.theme && Highcharts.theme.legendBackgroundColor) || '#FFFFFF'
},
Tooltipにるカーソル位置の気温、湿度、気圧データの表示
マウスによりグラフの一部にカーソルを置くと、Tooltipによりその位置の気温、湿度、気圧データ値を表示します。「formatter」と各データのクラス変数を用いるの任意の形式で表示することができます。
tooltip: {
formatter: function() {
var s = this.x;
s += '<br/>' + '<span style="color:#228B22;">'+this.points[2].series.name+'</span>' +': '+
this.points[2].y +'℃';
s += '<br/>' + '<span style="color:#4169E1;">'+this.points[1].series.name+'</span>' +': '+
this.points[1].y +'%';
s += '<br/>' + '<span style="color:#DAA520;">'+this.points[0].series.name+'</span>' +': '+
this.points[0].y +'mb';
return s;
},
shared: true
},
グラフ上にボタンの作成
次のスクリプトを追加すると、二つのボタンを画面の右上に作成され、それぞれ「今日」、「昨日」となります。ボタンを押すとalertダイアログが表示されます(テスト用)。
exporting: {
buttons: {
customButton: {
text: '昨日',
onclick: function () {
alert('昨日');
}
},
anotherButton: {
text: '今日',
onclick: function () {
alert('今日');
}
}
}
},
表示する気温、湿度、気圧の各センサ情報の取得
表示する気温、湿度、気圧の各センサ情報は、Ajaxによりデータベースにより取得します。Ajaxについては、「AjaxによるjQueryとPHP間のデータ交換 」を参照してください。Highchartsから、今日の日付をパラメータにしてgetJSON関数を呼び出し、データベースに保存した環境データを要求します。データベースからのデータの取得は、「環境データ保存用データベースの作成 」を参照にしてください。データベースから取得した環境データはjsonを用いて、配列でHighchartsに戻します。
次のスクリプトをHighchartsに追加して、データベースから環境データをjson形式で取得します。取得したデータは各データ毎に「options.series[x].data」に設定します。options.seriesの配列の引数xをそれぞれ、気温、湿度、気圧に割り当てます。
var date = new Date();
var year = date.getFullYear();
var month = (1 + date.getMonth()).toString();
month = month.length > 1 ? month : '0' + month;
var day = date.getDate().toString();
day = day.length > 1 ? day : '0' + day;
var today = year+ '/' +month + '/' + day ;
$.getJSON("Sensor.php",{"today_date":today},function(data){
options.series[2].data = data[0];
options.series[1].data = data[1];
options.series[0].data = data[2];
var chart = new Highcharts.Chart(options);
});
getJSON関数から呼び出されるphpファイル「Sensor.php」で、パラメータから取得した日にちに対応する環境データをデータベースから取得して、json_encode関数でjson形式に変換して環境データをHighchartsに戻します。
Sensor.php
<?php
$today_date = $_GET['today_date'];
・
・
($today_dateに対応する環境データを取得して$userに保存する。)
・
header('Content-type: application/json; charset=UTF-8');
echo json_encode($user);
?>

