Flot + Ajax(jQuery) メモ
July 7, 2014 – 10:44 am前回、時系列データをFlotを用いて複数の時系列データを一つのグラフ上に描画する方法についてメモしておいた。
今回は、これを少し進めるかたちで、生の時系列データをAjaxを用いて取り込み、これをFlotで描画する方法につい検討した。
データ概要: 描画したグラフは前回と全く同様ではあるが、前回と異なる時系列データの取り込みから描画に至るjavaScritpソースそしてAjaxを通じて取り込んで時系列データをメモとして残しておいた。
なお、以下に示すHTMLならびにJavaScriptソースで描画されるグラフは前回示したものと全く同じである。
描画に用いたHTML並びにJavaScriptソース:
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Checking Flot</title> <!--[if lt IE 9]> <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <script type="text/javascript" src="./jquery.js"></script> <script type="text/javascript" src="./flot/jquery.flot.js"></script> <script type="text/javascript" src="./flot/jquery.flot.axislabels.js"></script> </head> <body> <div id="placeholder" style="width:600px;height:300px;"></div> <script type="text/javascript"> $.ajax({ type: "GET", cash: false, url: "/ajax_flot/multi_plot.data", dataType: 'text', success: function( data, dataType ) { if ( dataType = "text" ) data = eval(data); var mydata = set_mydata( data ); $.plot($("#placeholder"), mydata, options); } }); function set_mydata( data ) { var imax = data.length; var d1 = new Array(imax); var d2 = new Array(imax); var d3 = new Array(imax); for ( var i=0; i<imax; i++ ) { d1[i] = new Array(2); d1[i][0] = data[i][0]; d1[i][1] = data[i][1]; d2[i] = new Array(2); d2[i][0] = data[i][0]; d2[i][1] = data[i][2]; d3[i] = new Array(2); d3[i][0] = data[i][0]; d3[i][1] = data[i][3]; } var mydata = [ {label: "Rainfall", data: d1, bars:{ show: true, align: "center", barWidth: 12*24*60*60*1000, fill: true, lineWidth: 1 }, color: "#478514" }, {label: "Temperature - High", data: d2, lines:{show:true, fill: false }, points:{show:true, fillColor: '#AA4643'}, color: "#AA4643", }, {label: "Temperature - Low", data: d3, lines:{show:true, fill: false }, points:{show:true, fillColor: '#4572A7'}, color: "#4572A7", yaxis: 2 } ]; return mydata; } var options = { xaxis : { min: new Date(2010, 11, 15).getTime(), max: new Date(2011, 11, 18).getTime(), mode : "time", timeformat: "%b", monthNames: ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"], // tickSize: [1, "month"], tickSize: [3, "month"], tickLength: 0, // hide gridlines axisLabel: "Months", axisLabelUseCanvas: true, axisLabelFontSizePixels: 12, axisLabelFontFamily: "Verdana, Arial, Helvetica, Tahoma, sans-serif", axisLabelPadding: 5 }, yaxes: [ { tickFormatter: function (val, axis) { return val + "mm"; }, max: 65, axisLabel: "Rainfall", axisLabelUseCanvas: true, axisLabelFontSizePixels: 12, axisLabelFontFamily: "Verdana, Arial, Helvetica, Tahoma, sans-serif", axisLabelPadding: 5 }, { position: "right", tickFormatter: function (val, axis) { return val + "\u00B0C"; }, max: 40, axisLabel: "Temperature", axisLabelUseCanvas: true, axisLabelFontSizePixels: 12, axisLabelFontFamily: "Verdana, Arial, Helvetica, Tahoma, sans-serif", axisLabelPadding: 5 } ], grid: { hoverable: true, borderWidth: 1 }, legend: { labelBoxBorderColor: "none", position: "nw" } }; </script> </body> </html>
Ajax でとりこまれる時系列データ - multi_plot.data –
[ [new Date('2011/01/01').getTime(), 33, 11, 0 ], [new Date('2011/02/01').getTime(), 34, 13, 2 ], [new Date('2011/03/01').getTime(), 23, 16, 3 ], [new Date('2011/04/01').getTime(), 39, 18, 5 ], [new Date('2011/05/01').getTime(), 47, 22, 9 ], [new Date('2011/06/01').getTime(), 26, 28, 13 ], [new Date('2011/07/01').getTime(), 11, 33, 16 ], [new Date('2011/08/01').getTime(), 12, 32, 16 ], [new Date('2011/09/01').getTime(), 24, 28, 13 ], [new Date('2011/10/01').getTime(), 39, 21, 8 ], [new Date('2011/11/01').getTime(), 48, 15, 4 ], [new Date('2011/12/01').getTime(), 48, 11, 2 ] ]