JFreeChart-1.0.10でロウソク足を描く

JfreeChart 1.0.10でのロウソク足は、OHLCSeries というデータセット(エクセルでいう系列に相当)を使う。OHLCSeriesの一つの要素(ある日の四本値)は

で構成される。このうち、時刻に相当する RegularTimePeriod というのが分かりにくかったのでメモ。

RegularTimePeriod は「時間軸で、ある幅を持った単位」の順序関係のあるクラスで、要するにグラフの「日単位」「週単位」「月単位」という「幅を持った」「時刻」をあらわす。
RegularTimePeriod は抽象クラスなので new では生成できず ( 補足: インスタンスを独立して持つ必要がないためシングルトンパターンを使っているのだと思われる ) 、

RegularTimePeriod.createInstance(Day.class, date.getTime(), TimeZone.getTimeZone("JST"));
という形で生成する。

  • 第一引数はその時間の単位(即ち時刻の幅、例では日単位)を JFreeChart の Day クラスで指定
  • 第二引数は時間軸上の位置をミリ秒で指定
  • 第三引数は、第二引数の所属するタイムゾーンを指定

グラフの時間軸に既存の Calendar クラスなどをそのまま使わず、TimePeriod のような「時間の幅」を意識したクラスを用いることで、「前の時刻」、「次の時刻」の計算が容易になるから、というような説明が javadoc に書かれている。実際、四本値は一日や一週間や一月の株価の値動きのことであるから、ある一点の時刻で表すよりは合理的だと考えれば納得できる。

追記 2009-01-13
Matlabのマニュアルを見ていて、Time Series オブジェクトというものがあるのを見つけた。どうやら jFreeChart の一部のデータセットMatlab を手本に作られているらしい。