Haskell プログラム集


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 からやったほうが速いだろう。