Haskell에서 그림 그리기 (gnuplot) -사용 예 -

7548 단어 하스켈gnuplot
Haskell에서 그림 그리기 (gnuplot) - 해설 편 - 쌍둥이 기사입니다.

Haskell에서 그래프 작성



Haskell에서 놀고 있다면 아무래도 그래프를 출력하고 싶어집니다 (이 기사의 그래프는 모두 다이어그램 그래프입니다). 대표적인 그래프 작성의 방법으로서 Chart 와 gnuplot 가 있습니다만, 이번은 Gnuplot 를 소개합니다.

gnuplot을 사용하는 이점은 설치가 간단하다는 것입니다. 예를 들어 우분투라면
sudo apt-get install gnuplot
cabal install gnuplot

에서 설치할 수 있습니다.
사용할 때도
import Graphics.Gnuplot.Simple

로 끝납니다.
이전에는 사용예와 해설 양쪽을 쓸 예정이었습니다만, 상상 이상으로 쓰고 싶은 내용이 많으므로, 해설은 별도 기사 로 합니다. 이 기사에서는 PNG, EPS에 출력하는 코드의 샘플을 올릴 예정입니다.
기본, 코멘트 아웃의 개소를 편집하는 것으로 그래프를 변경할 수 있다고 생각합니다.
당연하지만, 불명한 점은, gnuplot 자체, Graphic.Gnuplot 둘 다 조사하는 것이 포인트입니다.

2D 궤적


import Graphics.Gnuplot.Simple

--z::[[(Double,Double)]] legend::[String]
costumPlotPaths z legend = plotPathsStyle atribute plotstyle
  where
    fontType = "Helvetica"
    tics     = Custom "tics"   ["font","\""++fontType++",16\""] -- 目盛りのフォントの変更
    xlavel   = Custom "xlabel" ["font","\""++fontType++",20\""] -- xlabelのフォントの変更
    ylavel   = Custom "ylabel" ["font","\""++fontType++",20\""] -- ylabelのフォントの変更
    keyFont  = Custom "key"    ["font","\""++fontType++",18\""] -- 凡例のフォントの変更    
    titleFont= Custom "title"  ["font","\""++fontType++",24\""] -- タイトルのフォントの変更    
    key = [(Key (Just["box lt 8 lw 1"]))]--凡例の枠囲み凡例の位置変更はこのリストに(Key (Just["right bottom"]))等を追加
    label = [(YLabel "y"),(XLabel "x")]--軸の見出し
    save = [EPS "test.eps",Custom "terminal" ["eps","enhanced","color"],Custom "bmargin" ["4"]]
    --save = [PNG "test.png"] -- PNGで出力するときは上の一文をコメントアウトしこれを使う。
    title = [Title "sin and arcsin"]--グラフのタイトル
    size = [Aspect (Ratio 0.7)]--グラフの形 縦/横
    font = [tics,xlavel,ylavel,keyFont,titleFont]
    atribute = (save++key++label++title++size++font)--fontは後述
    plotstyle = [x|i <-[0..(length z-1)],let x = (defaultStyle {lineSpec = CustomStyle [(LineTitle (legend!!i)),(LineWidth 2.0)]},z!!i)]

--例
main = do
  let x = linearScale 1000 ((-2::Double)*pi,2*pi)
  let y = fmap sin x
  let z = zip x y
  let w = zip y x
  let legend = ["sin","arcsin"]--線の名前、凡例に反映
  costumPlotPaths [z,w] legend



향후 예정



서둘러 해설 기사를 갱신, 그래프의 종류를 늘립니다.

좋은 웹페이지 즐겨찾기