SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

「Dojo道場」~実用アプリ構築のためのベストプラクティス

Dojo道場 ~ 第1回「グラフを使いこなす(前編)」

「Dojo道場」~実用アプリ構築のためのベストプラクティス

5. 複合グラフの描画

 複数の種類のplotを組み合わせることで、複数の種類のグラフを同時に表示することもできます。以下の例では、"default"の折れ線グラフ用plotに加えて、"columns"という名前で棒グラフ用plotを追加し、plotプロパティに"columns"を指定したseriesを追加することで、折れ線グラフと棒グラフを表示しています。さらに、グラフの右側に"right"という名前でaxisを追加し、"columns" plotのvAxisプロパティに"right"を指定して、"columns" plotで描画するグラフに対応する目盛りを表示しています。また、背景用のGrid plotも追加しています。ここでは、ある会社の年度別月間売上高を折れ線グラフ、新規契約数を棒グラフで表示する例を考えましょう。

// 2008年度月別新規契約数
var contracts2008 = [11, 12, 11, 20, 22, 20, 32, 30, 35, 30, 10, 5];
// 2009年度月別新規契約数
var contracts2009 = [20, 17, 21, 31, 41, 41, 31, 28, 21, 20, 32, 33];
var myChart = new dojox.charting.Chart2D("myChart");
myChart.addPlot("default", {type: "Lines"});
// 棒グラフ用 plot 追加
myChart.addPlot("columns", {type: "ClusteredColumns", vAxis: "right", gap: 5});
// 背景追加
myChart.addPlot("grid", {type: "Grid"});
myChart.addSeries("2008年度売上高", revenues2008);
myChart.addSeries("2009年度売上高", revenues2009);
myChart.addSeries("2008年度新規契約数", contracts2008, {plot: "columns"});
myChart.addSeries("2009年度新規契約数", contracts2009, {plot: "columns"});
myChart.addAxis("x", {majorTickStep: 1, natural: true, labels: labels});
// 左側の縦軸を追加
myChart.addAxis("y", {vertical: true, fixUpper: "major", includeZero: true});
// 右側の縦軸を追加
myChart.addAxis("right", {vertical: true, leftBottom: false, fixUpper: "major", includeZero: true});
myChart.setTheme(dojox.charting.themes.PrimaryColors);
myChart.render();
実行結果:
実行結果:

6. ウィジェット

 Chart2Dオブジェクトを使って、グラフを描画する代わりに、Chart2Dウィジェットを利用して、HTMLのマークアップでグラフをページに埋め込むこともできます。Chart2Dウィジェットを利用するには、あらかじめdojox.charting.widget.Chart2Dをdojo.require()で読み込んでおく必要があります。

dojo.require("dojox.charting.widget.Chart2D");

 HTMLを以下のように変更します。

<body class="claro">
<div dojoType="dojox.charting.widget.Chart2D" id="myChart" style="width: 400px; height: 200px;">
    <div class="plot" name="default" type="Lines" tension="3"></div>
    <div class="series" name="2008年度売上高" stroke="{color: 'red', width: 3}"
        data="13000, 13000, 13000, 15000, 16000, 17000, 27000, 30000, 38000, 38000, 25000, 23000"></div>
    <div class="series" name="2009年度売上高" stroke="{color: 'blue', width: 3}"
        data="27000, 30000, 30000, 35000, 40000, 45000, 46000, 42000, 37000, 35000, 38000, 40000"></div>
	<div class="axis" name="x" majorTickStep="1" natural="true"
		labels="[{value: 1, text: '4月'}, {value: 2, text: '5月'}, {value: 3, text: '6月'},
		{value: 4, text: '7月'}, {value: 5, text: '8月'}, {value: 6, text: '9月'},
		{value: 7, text: '10月'}, {value: 8, text: '11月'}, {value: 9, text: '12月'},
		{value: 10, text: '1月'}, {value: 11, text: '2月'}, {value: 12, text: '3月'}]"></div>
    <div class="axis" name="y" vertical="true" fixUpper="major" includeZero="true"></div>
</div>
</body>
実行結果:
実行結果:

 表示されたグラフに対し、Legendウィジェットを配置すると、グラフの凡例を表示することができます。

 Legendウィジェットを使用するには、dojox.charting.widget.Legendをdojo.require()で読み込んでおく必要があります。

 chartプロパティには、対象のChart2Dのインスタンスを指定します。またhorizontalプロパティで凡例の配置方法、swatchSizeで凡例の見本のサイズを指定できます。

var myLegend = new dojox.charting.widget.Legend({
    chart: myChart,
    horizontal: true,
    swatchSize: 15
}, "myLegend");

 また、凡例を表示するためのDOMノードを用意します。

<div id="myLegend"></div>

 4節の最初のグラフに対しては、次のように表示されます。

実行結果:
実行結果:

7. まとめ

 このようにDojo Toolkitのチャート・コンポーネントにより、さまざまな種類のグラフを細かなオプションを指定して描画することができます。これによって、自分好みのヴィジュアルなグラフを描画することができるでしょう。

 また、このチャート・コンポーネントは、グラフの動的なデータの更新やイベント処理もサポートしています。これらを使えば、サーバーからJSON形式でデータを受け取って定期的にグラフを更新したり、ユーザーの入力に応じて描画内容を変更したりといった、よりインタラクティブなビジネス・アプリケーションUIを実装することができます。今回は基本的な描画機能のみに絞ってご紹介しましたが、次回は、このようなより進んだ機能について解説します。

修正履歴

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
「Dojo道場」~実用アプリ構築のためのベストプラクティス連載記事一覧

もっと読む

この記事の著者

黒川 洋(クロカワ ヒロシ)

日本アイ・ビー・エム株式会社 ソフトウェア開発研究所に勤務。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

中倉 勘作(ナカクラ カンサク)

2008年日本アイ・ビー・エム株式会社入社。現在、ソフトウェア開発研究所所属。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5547 2010/11/11 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー