Gnuplot
Gnuplot でグラフを書く
Haskell から Gnuplot にデータを渡してグラフを書かせてみた。やりかたは次のようになる。まず、x軸のデータのリスト x を作る。次に x を元に sin(x) のデータのリスト y を作る。更に x と y を文字列化してスペースで区切った文字列のリスト xy を作る。最後に writeFile 関数で、xy を unlines したものをテンポラリファイルに書き込む。これでデータファイルが作成できる。
次に Gnuplot のコマンドリストを作り plot に束縛する。最後に System.Process の callCommand でプロットを実行すると、サインカーブが描かれる。
画像を終了させて、ターミナルで何かキーを押すと終了する。
ソースプログラム
ファイル名: plotxy.hs
module Main where
import System.Process
x = [0,0.05..6.28] y = map sin x xy = zipWith (\x y -> show x ++ " " ++ show y) x y
main = do writeFile "data_sin.txt" $ unlines xy let plot = "gnuplot -e 'plot" ++ "\"" ++ "data_sin.txt" ++ "\"" ++ " w l; pause -1" ++ "'" callCommand plot
実行例
~$ runghc plotxy.hs
簡単なプログラムだが、Gnuplot にデータを渡すところで苦戦した。データファイルを作る部分は ghci で簡単にできるので、データファイルだけ作って、グラフの描画は Gnuplot からやったほうが速いだろう。