まめ畑

ゆるゆると書いていきます

Gruffでグラフを書いてみよう

Rubyでグラフが書けるものがないかなと探していたらあったので、そのメモ。
Gruffというものなのですが、これが結構綺麗でいろんなグラフが書けるようなので使ってみる価値あり。
Gruff Graphs for Ruby | Ruby on Rails for Newbies

インストール

今回はWindowsXPにインストールしてみる事に。
Rmagickを使用してういるのでそちらも入れる。


RmagickをWindowsでは

gem install rmagick

でインストールしようとすると

This rmagick gem is for use only on Linux, BSD, OS X, and similar systems.
Use the rmagick-win32 gem to install RMagick on Windows.

と言われコマンド一発では導入出来ない。
これはWindwsでやろうとした罰ですね。大変ありがとうございました。


ということで、RubyForge: RMagick: Project Infoからrmagick-win32をDLしてインストールしないといけません。
rmagick-win32はDL画面の下側のカテゴリにあります。
今回は、RMagick-2.6.0-ImageMagick-6.4.3-6-Q8.zipをDLしています。

DLして解凍します。
まずImageMagick-6.4.3-6-Q8-windows-dll.exeをインストール。
ここで気をつけないといけないのが、ImageMagickとGruffのバージョンの一致。
すでにPCにこのバージョン以外のImageMagickがインストールされているからといって、これをインストールしなくておkというわけではないです。
ZIPに固められているRmagickとImagiMagickのペアでないと正常に動作しません。
なので必ずインストールをします。
あとは、Update executable search pathにチェックが入っていることを確認してください。
Meadowがインストールされている環境では、Meadowなどをインストールした際にインストールされるImageMagickのバージョンが古いので、いらねと削除するとMedowが起動しなくなるので注意。


次に、Rmagickをインストールします。
先ほど解凍したディレクトリに移動して

gem install rmagick --local

を実行。
もし
Error installing gem rmagick[.gem]: buffer error
とエラーが出るときはrubygemsのバージョンが古いので

gem update -system

を実行してからやり直して下さい。


あとは

gem install hoe
gem install gruff

で完了。

使ってみる

ドキュメントはgruff-0.3.6 Documentation
結構設定できる感じ。
一応、日本語も使えます。
その際は、UTF-8で保存して日本語フォントを指定する必要があります。

require 'rubygems'
require 'gruff'


#初期化する(Lineは折れ線グラフ)
#コンストラクタにnew('高さx横幅')の形で渡せばそのサイズになる
g = Gruff::Line.new

#タイトルと日本語フォントの指定
#今回はこのファイルと同じところにフォントファイルを置いたが、絶対パス指定でもおk
g.title = "ドルと日本円の激しい関係"
g.font = "./meiryo.ttc" 

#X軸のラベルサイズ
g.marker_font_size = 10

#Y軸の最大値と最小値を設定
#設定しないと自動
#最大値や最小値だけを設定するとエラーが出る。
g.maximum_value = 105
g.minimum_value = 95

#背景色
#色を2色設定しているので上から下へ青から白にグラデーションがかかる
g.theme = {:background_colors => %w[blue white]}


#描画するデータ設定(今回は1種類のデータ)
#データの個数分以下の形式で追加していく
#g.data("名前", [データ,データ,・・・], "色")
g.data("JPY USD", [100.6399, 99.5199, 99.18, 101.33, 101.3399, 105.3, 105.3199, 105.7399, 106.0299, 104.08], "#cc6699")


#X軸のラベル
g.labels = {0 => '10月10日',1 => '10月9日',2 => '10月8日',3 => '10月7日',4 => '10月6日',5 => '10月3日',6 => '10月2日',7 => '10月1日',8 => '9月30日',9 => '9月29日'}

#書き出す
g.write('yen.png')


結果

もろもろの設定項目

Gruff::BaseのAttributeを上書きする。


ご丁寧にいろいろテーマが設定されているので以下から選ぶだけでおk

g.theme_37signals
g.theme_greyscale
g.theme_keynote
g.theme_odeo
g.theme_pastel
g.theme_rails_keynote


自分でテーマを作ってみる
こんな感じでもろもろな設定項目を指定するだけ。
色を配列で指定すると、自動的にデータに1つずつ設定される。

g.theme= {
   :colors => ["color1", "color2"], #グラフの色
   :marker_color => "color",        #マーカーの色(上記のような指定の仕方も可)
   :background_colors => "color"    #背景色(%w[blue white]のように2色していすると上から下へグラデーションがかかる)
   #:background_image => "hoge.png" #背景画像
}

標準はこんな

      defaults = {
        :colors => ['black', 'white'],
        :additional_line_colors => [],
        :marker_color => 'white',
        :font_color => 'black',
        :background_colors => nil,
        :background_image => nil
      }


設定項目

bottom_margin 下のマージン
colors グラフの色
font フォントの設定
hide_legend Trueにすることで凡例を非表示
hide_line_markers Trueにすることでマーカを非表示
hide_line_numbers Trueにすることでライン番号を非表示
hide_title Trueにすることでタイトルを非表示
left_margin 左のマージン
legend_box_size 凡例のサイズ
legend_font_size 凡例のフォントサイズ
marker_color マーカー色
marker_count マーカーのライン数
marker_font_size マーカーのフォントサイズ
maximum_value 最大値
minimum_value 最小値
no_data_message データがない場合に表示される文字。20文字以内(日本語だと10文字かな?)
right_margin 右のマージン
sort Trueでデータをソートして表示
title グラフのタイトル
title_font_size グラフのタイトルのフォントサイズ
top_margin 上のマージン
x_axis_label X軸ラベル
y_axis_increment Y軸ラベルの増加幅
y_axis_label Y軸ラベル

まとめ

円グラフ・棒グラフ・折れ線グラフが書けます。
色の指定やテーマの指定で見た目の指定も可能です。
しかし、かなり細かいことまでは出来ないので注意です。


あとは、Y軸の刻み幅の問題が以下のエントリで報告されています。
Gruffでグラフ!格好いいグラフを簡単に生成 - OneRingToFind

こちらもソースを見て修正を行ってみようと思います。
あと、Y軸の最小値と最大値を両方していしないとエラーが出るのは面倒なので直してみたいと思います。


しかし、グラデーションも簡単にかけられたりと使えますね。
RailsのHelperもあるようなので動的にグラフを生成するためにバイナリで書き出してくれるオプションもあります。
簡単にグラフが生成出来ますね。