前回、シミュレーション結果をチャートにして画像ファイルとして出力する方法を見ました。 今回は引き続き、チャート関連の話。
今回はシミュレーション結果自体ではなく、それと比べる他のデータをチャートに付加する方法を見ていきます。 具体的には
- x 軸、y 軸に平行な直線(マーカー)の描画
- 関数指定による曲線の描画
- 外部データのプロット
を見てきます。 すべて marker ノードによって指定し、label 属性で(凡例などの)名前を設定します。
x 軸、y 軸に平行な直線の描画
まずは x 軸や y 軸に平行な直線。 JFreeChart でマーカーと言われるのはこの直線です。 x 軸、y 軸に平行な直線は、それぞれ y 属性、x 属性を指定します:
import java.awt.Color new SimulationBuilder().simulation{ ... png(fileName:'marker.png', overwrite:true){ chart(title:'Time-Temperature Chart', domainLabel:'Time', rangeLabel:'Temperature'){ point(label:'T', x:'time', y:'T') marker(label:'time = 1', x:1d, color:Color.GREEN) marker(label:'T = 30', y:30d, color:Color.BLUE) } } }
このコードで、marker ノードはそれぞれ「x = 1」、「y = 30」の直線(今の場合は「time = 1」、「T = 30」 )を描画します。 色の指定は color 属性に java.awt.Color オブジェクトを設定しています。 AWT なら paint 属性の方がいいのかも知れませんが、それは今後の課題にってことで。 チャートを描画すると下図のようになります:
関数指定による曲線の描画
次は関数の指定。 JFreeChart では関数の描画は Function2D インターフェースを使用しますが(こちらを参考のこと)、Groops では Groovy のクロージャを使うのが自然でしょう:
new SimulationBuilder().simulation{ ... png(fileName:'function.png', overwrite:true){ chart(title:'Time-Temperature Chart', domainLabel:'Time', rangeLabel:'Temperature'){ point(label:'Simulation', x:'time', y:'T') marker(label:'Exact Solution', function:{ double t -> 17d - (17d - 82.3d)*Math.exp(-t) }, samples:1000) } } }
function 属性に、関数に対応するクロージャを渡しています。 また、サンプリングの個数を samples 属性によって指定しています。 samples 属性がなければデフォルト値が使われます(今のところ1000)。 チャートを描画するとこんな感じ:
外部データのプロット
最後は、実験データなどの外部データをプロットする方法。 シミュレーションを実行するフォルダ上に以下のような data.csv ファイル(comma-separated value, コンマで区切られたデータ)があるとしましょう:
# data.csv 0,0.0,82.3 1,0.1,64.6037 2,0.2,45.109508813 3,0.30000000000000004,59.84333 4,0.4,75.77 5,0.5,42.298557931699996 6,0.6,48.23278757 7,0.7,51.7030973 8,0.7999999999999999,69.893 9,0.8999999999999999,55.558997000000005 10,0.9999999999999999,39.768702138529996
このとき、以下のように fileName 属性によってファイル名を指定すれば、データを点としてプロットできます:
new SimulationBuilder().simulation{ ... png(fileName:'file.png', overwrite:true){ chart(title:'Time-Temperature Chart'){ point(label:'Simulation', x:'time', y:'T') marker(label:'Experiment Data', fileName:'data.csv', x:1, y:2) } } }
x 属性、y 属性はデータの何行目のデータを使うかを指定しています。 これらの指定がなければ、デフォルトで x に0、y に1が指定されているものと見なされます。 チャートを描画すると下図のようになります:
- 作者: ハーベイゴールド,ジャントボチニク,Harvey Gould,Jan Tobochnik,鈴木増雄,石川正勝,溜渕継博,宮島佐介
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 2000/12
- メディア: 単行本
- クリック: 5回
- この商品を含むブログ (45件) を見る