Highcharts の応用メモ のつづきの記事です。
前回説明しきれなかった Highstock のパラメータをここで解説していきます。
スポンサーリンク
Highstock の期間範囲の設定
Zoom に表示される期間の変更するには rangeSelector というパラメータを弄ります。
“4時間”, “90日”, “全データ” という期間で区切りたい場合は下記のような設定をすれば OK です。
rangeSelector : { selected: 1, // デフォルトで表示させる期間 // 0 からカウントしこの場合は日単位 buttons : [{ type : 'minute', // 分単位 (0) count : 240, // 約 240 分のデータを表示 text : 'm' // ボタンの表示名 }, { type : 'day', // 日単位 (1) count : 90, // 約 90 日のデータを表示 text : 'd' }, { type : 'all', // 全データ (2) count : 1, text : 'All' }] },
これだけであとは Highstock がヨロシクやってくれます。
他にも下記のような期間タイプが設定できます。
millisecond, second, minute, day, week, month, ytd (year to date), year, all
Highstock のスクロールバー
また scrollbar, navigator というパラメータもありますが、これを有効にするとグラフの下にスライドバーが表示されるようになります。
スクロールバーの参考画像
無くても困らないのでこれはお好みで。
Highstock のグラフ設定
最後に、複数データのグラフを表示する部分ですがこれは単純に series パラメータにそれぞれのデータを渡すだけです。
series: [{ name: 'line1', // データ1 の名前 data: line1, // データが入った配列 type: 'spline' // 描画するグラフタイプ },{ name: 'line2', // データ2 の名前 data: line2, type: 'spline' },{ name: 'line3', // データ3 の名前 data: line3, type: 'spline' }]
うろ覚えですが同時に 13 データくらい描画できたような気がします。
ポイントはこんな所です。
Highstock で異なる桁数のデータを同時に描画する方法
上記で説明したやり方は描画するデータの桁数が同じような場合にのみ有効です。
例えば 「データ 1 は 2桁」、「データ 2 は 7 桁」 というような異なる桁数のデータを同時に描画すると下記のような残念な感じになります。
最大桁数を基準に表示されてしまうので 「データ 2」 の線が下に張り付いてしまいます。
下記はこれを改善したグラフです。
Highstock Demo
色合いとか微妙な感じですが、まあ見れるグラフにはなったと思います。
ソースはこんな感じでポイントにコメントを入れてます。
Highstock Demo のサンプルソースコード
// Highcharts の時間軸は標準が UTC です。 // ローカルタイムを使用する場合はこのようにfalse を設定します。 jQuery(function() { Highcharts.setOptions({ global: { useUTC: false } }); }); jQuery(function() { jQuery.getJSON('http://example.com/data/demo3.json', function(data) { var data0 = []; var data1 = []; var dataLength = data.length; for (var i = 0; i < dataLength; i++) { data0.push([ data[i][0], data[i][2] ]); data1.push([ data[i][0], data[i][1] ]) } window.chart = new Highcharts.StockChart({ chart: { renderTo: 'highcharts_demo3', }, title: { text: 'Traffic and PV' }, credits: { text: '' }, scrollbar: { enabled: false // scrollbar 無効 }, navigator : { enabled : false // navigator 無効 }, rangeSelector : { selected: 1, buttons : [{ type : 'minute', count : 240, text : 'm' }, { type : 'all', count : 1, text : 'All' }] }, yAxis: [{ lineWidth: 0, // data0 の Y 軸設定 offset: 10, title: { text: 'Traffic ( Byte )', }, labels: { align: 'right', x: -3, y: 6 } },{ lineWidth: 0, // data1 の Y 軸設定 offset: 10, max: 30, // data1 は最大値を 30 に固定 opposite: true, // Y 軸をグラフの右側に表示 title: { text: 'PV', }, labels: { align: 'left', x: -3, y: 6 } }], legend: { enabled: true, align: 'right', layout: 'vertical', verticalAlign: 'top', y: 100 }, series: [{ name: 'Traffic', // data0 data: data0, type: 'area', // グラフタイプの設定 color: '#4572a7', // 色の指定 },{ name: 'PV', // data1 data: data1, type: 'spline', // グラフタイプの設定 color: '#ffa500', // 色の指定 yAxis: 1, // Y 軸の関連付け }] // data1 の Y 軸設定が有効になる }); }); });
data0, data2 data1 に渡される JSON はこんな感じです。
[ [1339513200000,8,4193991], [1339513260000,9,4659990], [1339513320000,2,1397997], [1339513380000,8,4193991], [1339513440000,9,4659990], . . . . . [1339599540000,7,3727992] ]
単に Y 軸の調整だけですね。
とりあえず Highcharts, Highstock 関連の話は以上です。
また何か発見があったら書きます。
miura さん
こんにちは?
誤字を発見しました?
data0, data2 に渡される JSON はこんな感じです
—> data0, data1 ではないかと・・・
さるさる様
はい、タイプミスですね^^;
該当箇所は訂正を入れました、ご指摘ありがとうございました。