5.チャート要素の変更

11月 25, 2006

さて、前回は最もシンプルと思われる棒グラフを描いてみましたが、サブタイトルをつけたい、売上高と経常利益の値に大きな差があるので、縦軸のメモリを別々にしたい、フォントを変えたいなど、実際に使うにあたってよく遭遇する見栄えのカスタマイズについて、触れたいと思います。



5.1 サブタイトルを追加
棒グラフが2001年~2005年の売上高と経常利益を示すのは明白ですが、たとえば2003年に決算期変更を行い、売上高、経常利益ともに減っていたらどうでしょう?

BarSampleSubTitle1

上期と下期の業績が毎年均等ならまだマシですが、下期のほうにやや偏っている場合、あたかも極端な業績悪化のように見えてしまいます。

このようなとき、サブタイトルに2003年度がたとえば6ヶ月の決算であったことを明記しておけば、見る人にとって誤解を招きにくくなります。
もちろん、Webサイトで公開するとき、見せるとき、画像のキャプションとして説明しておけば十分ですが、画像だけを保存された場合、画像として残っているチャートの数字のみが一人歩きすることも考えられます。
せっかくですから、チャートに表示した内容の注釈はチャートの画像に埋め込んだほうが、見た人や画像ファイルをダウンロードした人も、あとになって忘れてしまうこともなく、よさそうです。

そのようなとき、チャートのタイトルに注釈を入れてもいいのですが、JFreeChartでは、それ以外にサブタイトルを表示する機能がありますので、それを使ってみましょう。

BarSampleSubTitle2

サブタイトルは、1つだけでなく複数定義することができ、BarSampleSubTitle2では、「2001-2005年度」と「(注:2003年は6ヶ月決算)」の2つが、JFreeChartにおけるサブタイトルです。

このデモを見て気づいた方もいるかもしれませんが、実はサブタイトルが表示される代わりに、凡例が消えてしまっています。これは、JFreeChartが凡例をサブタイトルの一部、さらにいえば、一番最初(0番目)のサブタイトルとして凡例を扱っているためです。
凡例を残したまま、サブタイトルを表示する方法は、このページの一番最後に示します

以下、同様ですが、基本的にソースの1行1行にコメントを書いたので、プログラムの解説はソースファイルを見てください。


5.2 値を表示する
チャートは値の変化を概観するのに最適ですが、正確な値も同時に知りたい場合があります。このようなとき、Microsoft Excelであればグラフのデータ系列のプロパティで、値のラベルを表示することができます。もちろん、JFreeChartでも、同じように値のラベルを表示できます。

BarSampleValue


5.3 別の目盛りを追加する
棒グラフに表示した値を見ると、売上高と経常利益では10倍くらいの値の差があります。10倍くらいではまだマシなほうですが、2001年度の経常利益がいくらなのか、これではわかりません。
そこで、縦軸にもうひとつ目盛りを追加し、値の範囲が大幅に異なる場合でも識別できるようにします。

BarSampleDualAxis

簡単かと思ったら、BarSampleDualAxisのソースを見るとわかりますが、データを2つに分け、ダミーデータ(ダミー1、ダミー2)を登録し、ダミーデータの凡例を表示しないようにしたりと、意外に面倒です。
どんなライブラリを使うにしても、そのライブラリ固有のテクニック(技術力という意味ではなく、思い通りのことをするために必要な小細工)が必要になったりしますが、これはその類ですね。


5.4 タイトルのフォントを変更する
JFreeChartが適当にレイアウト、文字の大きさを設定してくれるため、多くの場合デフォルトのままでも問題ないと思いますが、propertiesファイルやユーザの自由にフォントを変更できるようにしたアプリケーションの場合、思い通りにフォントを設定したくなるときがあります。
サンプルプログラム BarSampleChangeFont では、チャートのタイトル、凡例、縦横の軸のタイトル、軸の値のラベルのフォントを変えてみました。

BarSampleChangeFont

java.awt.Font オブジェクトのコンストラクタに指定するフォント名は、動作する環境によりもっといろいろ指定できると思いますが、最低限ということで、SanSerif、Serifのみのバリエーションのみとしています。
(フォントとか、描画系の機能に弱いだけですが)


5.5 まとめると
最後に、5.15.4までに行ったさまざまな設定をまとめて実行してみます。
この中には、凡例を残したままサブタイトルを追加する方法も含めました。

BarSampleDemo

棒グラフのサンプルを使って、いくつか見栄えを変更するサンプルを作りました。サンプルのソースファイルに中にも書きましたが、Plot、Legend、Datasetなど、そろそろJFreeChartが表示するチャート、各部分の呼び名などを説明しないと、意味がわかりにくくなってきたと思います。

次回は、今後JFreeChartを使い込む、拡張するために必要なJFreeChartを構成するオブジェクトの名前を説明します。
ただ、私もJFreeChartの正式な教育を受けたわけでもはなく(そのようなものがあるかは知りませんが)、英語や英語圏での一般的な呼び名などをよくわかっていないため、誤った説明になる部分があるかもしれませんが、その点ご容赦ください。

Leave a Reply