Golangでローソク足チャートを描くパッケージを書いた

Golangでグラフを描くときには gonum plot が便利です。 これを使った例として、以前、棒グラフの記事も書きました。 その他の例としては、公式のwikiGo でグラフを plot するパッケージを試したが参考になります。
gonumのレポジトリを見ると 棒グラフや箱ひげ図、折れ線グラフなどが標準で実装されています。 (他にも関数などおもしろそうなものもあります)
ところがローソク足チャートは標準で実装されていないようです。 レポジトリのWikiを見ているとオリジナルのPoltterをカスタマイズするチュートリアルがあったので、 今回はローソク足チャートを実装してみました。

実装

実装はこちら。 gonumのPlotter定義にあるように Plot(draw.Canvas, *plot.Plot)を実装してあげる必要があります。
Plot(draw.Canvas, *plot.Plot)を実装した独自の型を、plot.New()で生成した*Plot型の変数に、Add()してあげれば、グラフが描けます。
今回はこのように実装しました。 流れは大まかに以下です。

  1. canvas(出力先画面)のサイズに応じた座標変換をplot.Transforms()で行う。
  2. ローソクの幅を決める
  3. データの最安値、最高値、始値終値をもとに箱とヒゲを描画する。

陽線と陰線は、始値終値から計算できるので、Plot()ではなく、 コンストラクタに委任し、各ローソクにColorフィールドとして持たせることにしました。
それ以外にも軸の表示とか、データをどうやってもたせるのがいいのかとか 実装する箇所は意外と細かく広範囲に渡るので詳しくは実装をご参照ください。

使い方

インストー

go get github.com/cipepser/plot

描画

実行例は以下です。 描画したいデータはdataに格納してください。

gist31d1820b58d1a4c7cf8d9d2e0013e515

結果

グラフは実行したディレクトリにimg.pngとして出力されます。

f:id:cipepser:20170709160604p:plain

References