本記事は、Haskellで図の描画(gnuplot)-使用例-で紹介したGraphics.Gnuplot.Simple の解説記事です。使用例や、私が使っている設定等はそちらを参考にしてください。
また、細かい設定を行う場合はソースを参考にしましょう。
0章 使い方
基本的に Graphics.Gnuplot.Simple のみを import します。
また関数は機能を限定するものが複数あります。つまり、例えば軌跡をプロットするplotPathという関数には、複数形の s の有無、plotStyle の指定の有無で
名前 | 機能 |
---|---|
plotPath | 1つの軌跡を Attribute という設定で描画 |
plotPaths | 複数の軌跡を Attribute という設定で描画 |
plotPathStyle | 1つの軌跡を Attribute と PlotStyle という設定で描画 |
plotPathsStyle | 複数の軌跡を Attribute と PlotStyle という設定で描画 |
の 4 種類あり、plotPathsStyleはその他の 3 つをすべて含む形となっています。その代わり、plotPath は最も引数が単純であるため、GHCi 上でちょっと見たい時などは有効です。(GHCi 上でplotPath [] z とすればとりあえず z が描画されます。)
Attribute, PlotStyle と2つ設定が出ていますが、これらは互いに設定できる内容が異なります。Attribute では、軸の設定や凡例の表示、タイトルなどグラフ全体に関わることを設定でき、PlotStyleは先の種類、大きさ、凡例に表示される線のタイトルなど、凡例一つ一つに関わるこを設定できます。なので、他人に見せるためのグラフを作成する場合は一番下の plotPahtsStyle を用いましょう
1章 plot関数の種類と使い方
先ほどの通り、同じ機能のものが複数ありますので、ここでは一番細かいものを代表にします。
名前 | 機能 |
---|---|
plotDots | 2 次元に散布図を描画 |
plotListsStyle | リストのインデックスをx軸に描画 |
plotPathsStyle | 複数の軌跡を Attribute と PlotStyle という設定で描画 |
plotFuncs | [数値]と関数を入力することで軌跡を描画 |
plotFunc3d | [x] [y] とf (x,y)を入力することで曲面を描画 |
plotParamFuncs | [t]と (x(t),y(t))を入力することで、パラメータ曲線描画 |
plotMesh3d | メッシュデータを引数に曲面を描画 |
2章 Atrribute
Attributeではグラフ全体に関する設定を行います。ソースファイルから引用しますと、
data Attribute =
Custom String [String] -- ^ anything that is allowed after gnuplot's @set@ command
| EPS FilePath
| PNG FilePath
| Terminal Terminal.T -- ^ you cannot use this, call 'terminal' instead
| Grid (Maybe [String])
| Key (Maybe [String])
| Border (Maybe [String])
| XTicks (Maybe [String])
| YTicks (Maybe [String])
| Size (Size)
| Aspect (Aspect)
| BoxAspect (Aspect)
| LineStyle Int [LineAttr]
| Title String
| XLabel String
| YLabel String
| ZLabel String
| XRange (Double, Double)
| YRange (Double, Double)
| ZRange (Double, Double)
| Palette [(Double, (Double, Double, Double))]
| ColorBox (Maybe [String])
| XTime
| XFormat String
と、沢山の種類があります。命名が親切で、例えばタイトルを付けたい場合は引数の[Attribute]の箇所に[Title "hoge"]と加え、さらにX軸にラベルを貼るなら[Title "hoge", Xlabel "xhoge"]と配列に加えるだけですみます。しかし、いくつか罠があります!!
グラフのサイズを大きくしたい
Sizeでは、画像の中でのグラフの大きくなるだけなので、ダメです。Aspectを用いましょう。
gnuplotで表示したい
GHCi上で :load を行えば可能ですが、コンパイルして実行するとダメです。EPSかPNGに保存しましょう。
文字サイズを大きくしたい、フォントを変えたい
XlabelやTitleに「font "Helvetica,20"」とか加えても無駄です。対応するものがないので、Costomを用います。
Costum [A] [B1,B2,..]は gnuplot上で"set A B1 B2 .." を実行しています。なので
Custom "Title" ["font","\"Helvetica,24\""]
を [Attribute] に加えてあげれば例えば上はタイトルがHelvetica,24になります。
凡例のフォントもここで変更します。
画像を保存したい、EPSが白黒になっちゃう
PNGで保存する場合は[PNG "filename.png"]で大丈夫です。
EPSの場合は[EPS "filename.eps"]で一応画像は出力されますが、白黒になってしまいます。
これはgnuplotでepsのカラー保存する際はset terminal eps enhanced color
とする必要があるのですが、Graphics.Gnuplot.Simpleでは、enhanced color を実行してくれないことにより生じます。よって、これもまた Customで作ってあげればよいのですが、画像の出力部分に関しては既存のものを使う必要があったり、リスト内の順序が影響したり、不明な点が多いです。
EPS "test.eps",Custom "terminal" ["eps","enhanced","color"]
これを[Attribute]に加えることでカラーのEPSを吐き出せます。(EPS "test.eps" の代わりに自分で output を Custom で作った場合、エラーは吐かれませんが画像も吐かれません)
凡例の線の名前を付けたい
PlotStyleでつけるのでここからいじることはできません。
3 章PlotStyle
グラフの線、点等の各々に付随する設定を行います。これを指定する際は plot する対象 x とタプルをつくって(PlotStyle, x)として使います。
data PlotType =
Lines
| Points
| LinesPoints
| Impulses
| Dots
| Steps
| FSteps
| HiSteps
| ErrorBars
| XErrorBars
| YErrorBars
| XYErrorBars
| ErrorLines
| XErrorLines
| YErrorLines
| XYErrorLines
| Boxes
| FilledCurves
| BoxErrorBars
| BoxXYErrorBars
| FinanceBars
| CandleSticks
| Vectors
線に名前をつける場合は
defaultStyle {lineSpec = CustomStyle [(LineTitle "linename"),(LineWidth 2.0)]}
とするといいですよ。これに関してはソースに注釈があります。
4 章Atirbute3d
勉強不足です。加筆予定。