WHAT'S NEW?
Loading...

PHPとjQueryライブラリ「jqPlot」で綺麗なグラフを描画する【6/10】

今回は円グラフを描画させてみようと思う。
基本的にはPieレンダラープラグインを読み込み、それをレンダラーに指定すればOKなはずだ。
早速いってみよう。

まずは円グラフのプラグインであるPieRendererを読み込む。headタグ内を以下のように編集する。
  1. <!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.min.js"></script><![endif]-->  
  2. <script type="text/javascript" src="jquery-1.3.2.min.js"></script>  
  3. <script type="text/javascript" src="jquery.jqplot.min.js"></script>  
  4. <script type="text/javascript" src="plugins/jqplot.pieRenderer.min.js"></script>  
これで円グラフを描画させる準備が整った。

次にデータを指定してみようと思う。
円グラフだからといって、データの合計が100になっている必要はない。好きなパラメータを好きなだけ指定することが出来るので、とりあえず以下のように設定してみた。
  1. $(document).ready(function(){  
  2.   var data1 = [5,1,6,5,7,3];  
  3.   plot = $.jqplot('graph', [data1]);  
  4. });  
それから円グラフなので、描画領域を正方形に変更してみた。
後で凡例を表示させるなど、編集をする場合、適宜サイズを調整しておこう。
  1. <body>  
  2.   
  3. <h1>jqPlot Test 3</h1>  
  4. <div id="graph" style="width:400px;height:400px;margin:30px;"></div>  
  5.   
  6. </body>  
このままではまだ折れ線グラフのままだ。
plotオブジェクトにrendererプロパティを設定し、PieRendererプラグインで描画させてみよう。
今回は全体設定であるseriesDefaultsプロパティを使ってみた。
  1. plot = $.jqplot('graph', [data1],{  
  2.     seriesDefaults:{  
  3.       renderer:$.jqplot.PieRenderer  
  4.     }  
  5.   });  
さて、これだけで画面に円グラフが表示されたと思うが、いかがだろうか。



折れ線グラフや棒グラフに対して、シェイプが視覚的に単純なため、かなりそっけないデザインで描画されている。ここら辺を何とかしようと思う。
まずは色を変更してみる。色を変更するには、seriesColorsプロパティを使い、配列で16進数指定すればよい。データが6個あるので、6種類のみ用意してみた。
  1. plot = $.jqplot('graph', [data1],{  
  2.     seriesDefaults:{  
  3.       renderer:$.jqplot.PieRenderer  
  4.     },  
  5.     seriesColors:[  
  6.       '#002244',  
  7.       '#224466',  
  8.       '#446688',  
  9.       '#6688aa',  
  10.       '#88aacc',  
  11.       '#aaccee'  
  12.     ]  
  13.   });  
データに対して色の数が足りない場合、繰り返し使われるので、隣り合ったデータが同じ色になってしまう場合がある。それを避けるため、できればあらかじめデータ数より多めに色を登録しておくとよいだろう。
この状態でブラウザで見てみると、こうなった。
冬にみたくない色合いになった。個人的に好きな配色ではないが、とりあえずこの状態でいろいろ進めてみよう。
次に、よくある円グラフの分断をやってみようと思う。隣り合ったデータにマージンをつけることが出来る。
具体的には、rendererOptionsでsliceMarginプロパティを設定するだけでOKだ。
  1. plot = $.jqplot('graph', [data1],{  
  2.     seriesDefaults:{  
  3.       renderer:$.jqplot.PieRenderer,  
  4.       rendererOptions:{  
  5.         sliceMargin:10  
  6.       }  
  7.     },  
  8.     seriesColors:[  
  9.       '#002244',  
  10.       '#224466',  
  11.       '#446688',  
  12.       '#6688aa',  
  13.       '#88aacc',  
  14.       '#aaccee'  
  15.     ]  
  16.   });  
この状態でブラウザで見てみると、以下のようになる。
円グラフはそもそもがそっけないモデルでもあるので、rendererOptionsでいろいろ設定することにより、にぎやかしを行うとよいだろう。さらにいろいろいじってみる。今度はパイの塗りつぶしをやめてみる。fillプロパティに対してfalseを設定だ。
  1. plot = $.jqplot('graph', [data1],{  
  2.     seriesDefaults:{  
  3.       renderer:$.jqplot.PieRenderer,  
  4.       rendererOptions:{  
  5.         sliceMargin:10,  
  6.         fill:false  
  7.       }  
  8.     },  
  9.     seriesColors:[  
  10.       '#002244',  
  11.       '#224466',  
  12.       '#446688',  
  13.       '#6688aa',  
  14.       '#88aacc',  
  15.       '#aaccee'  
  16.     ]  
  17.   });  
この状態でブラウザで見てみると、こうなる。
中心が少々不安定なレンダリングになってしまうが、かなり興味深い見せ方になった。ただこのままだとパイの線が細いので、少々太くしてみる。線の太さはrendererOptionsにlineWidthプロパティで設定可能だ。ここでは5にしてみた。
  1. plot = $.jqplot('graph', [data1],{  
  2.     seriesDefaults:{  
  3.       renderer:$.jqplot.PieRenderer,  
  4.       rendererOptions:{  
  5.         sliceMargin:10,  
  6.         fill:false,  
  7.         lineWidth:5  
  8.       }  
  9.     },  
  10.     seriesColors:[  
  11.       '#002244',  
  12.       '#224466',  
  13.       '#446688',  
  14.       '#6688aa',  
  15.       '#88aacc',  
  16.       '#aaccee'  
  17.     ]  
  18.   });  
この状態でブラウザで見てみると、以下のようになる。
やはり中心がおかしくなってしまう。これはcanvasの限界か、ロジックの問題だろうか。

何れにせよ、ここまで簡単な設定で複雑なグラフを描画出来るという意味では、業務にも個人的にもかなり有用だと思うので、気にせず次に進もう。

さすがに円グラフだけ「ドォォォォン!」と表示されても、何の意味があるのかが不明になってしまうので、凡例をつけてみようと思う。
jqPlotの解説初期にやったように、データ内にラベルを追加してみる。
  1. var data1 = [['PS2',5],['PS3',1],['DSi',6],['XBox360',5],['Wii',7],['PSP',3]];  
これで凡例を表示させるための準備が整った。
次に凡例の指定だ。これは以前行ったとおり、legendプロパティを設定することで表示が可能になる。
※先ほど行ったオプション指定は見た目が悪いので、塗りつぶしと線の太さ部分は削除してある。
  1. plot = $.jqplot('graph', [data1],{  
  2.     seriesDefaults:{  
  3.       renderer:$.jqplot.PieRenderer,  
  4.       rendererOptions:{  
  5.         sliceMargin:10  
  6.       }  
  7.     },  
  8.     seriesColors:[  
  9.       '#002244',  
  10.       '#224466',  
  11.       '#446688',  
  12.       '#6688aa',  
  13.       '#88aacc',  
  14.       '#aaccee'  
  15.     ],  
  16.     legend:{  
  17.       show:true  
  18.     }  
  19.   });  
この状態でブラウザで見てみると、以下のようになる。
なお、上記グラフの凡例はフィクションである。

ところで、各パイの上にパラメータを表示させたいのだが、時間がないため一旦ここで終わりにしておく。
ひとまずこれでjQueryグラフライブラリ「jqPlot」の説明は終わりにして、次回からはPHP(CakePHP)からグラフを表示させる内容を書いていこうと思う。

まだつづく。