Rails+Gruffでグラフ画像を生成・表示させる

ちょっと仕事でグラフ表示が必要になったので、メモ。
前提としてRmagickがインストールされている必要がある。インストール方法は割愛。


Rmagickがインストールされたら、gemでGruffをインストール

$gem install gruff

※自分の環境を参考まで。


ここでは、画像をローカル上に生成保存するのではなく、imgタグから指定できるよう画像のバイナリをsend_dataでレスポンスする方法とする。

Controller
class GruffController < ApplicationController
  require 'gruff'

  def image
    g = Gruff::Line.new 500
    g.title = "My Graph" 

    g.theme_37signals

    g.data("data1", [1, 3, 3, 6, 4, 3])
    g.data("data2", [7, 8, 7, 10, 8, 9])
    g.data("data3", [1, 2, 3, 5, 9, 8])
    g.data("data4", [9, 9, 8, 9, 10, 9])

    g.labels = {0 => '2010/01', 2 => '2010/03', 4 => '2010/05'}

    send_data(g.to_blob, :type => 'image/png', :disposition=>'inline')
  end
end

View

<%= image_tag url_for(:controller => 'gruff', :action => 'image') %>

こんなグラフが表示される

解説--
はじめにグラフオブジェクトのインスタンスを生成(引数は横幅)

Gruff::Line.new 500
  • 折れ線グラフ:Line
  • 円グラフ:Pie
  • 棒グラフ:Bar
  • 横棒グラフ:SideBar

など、詳しくは、Documentを参考⇒http://gruff.rubyforge.org/


背景色やグラフの色はテーマ(theme)としては以下が用意されている。

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


テーマ以外の自分で背景やグラフ線の色を変更したい場合は以下のようにする

theme = {
 :colors => ["#000", "#111" , "#222", "#333", "#444", "#555"],
 :maker_color => "#999",
 :font_color => "#000",
 :background_colors => %w("#FFF" "#CCC")
}
g.theme = theme


titleなど日本語フォントを利用する場合は、フォントファイルへのパスを指定する

g.font="/usr/share/fonts/sazanami-fonts-gothic/sazanami-gothic.ttf"


■Gruff Graphs for Ruby
http://nubyonrails.com/pages/gruff

■Gruff Documentation
http://gruff.rubyforge.org/


Railsレシピブック 183の技
高橋 征義 諸橋 恭介
ソフトバンククリエイティブ
売り上げランキング: 53568
おすすめ度の平均: 4.5
4 Ruby on Rails(Rails)についての逆引き集
4 Railsの構造・規約を整理できる。
5 Rails初心者にも、よく知ってる方にも役に立つ。Rails使う人必携の一冊。
5 2008年時点でのRails資料の決定版
5 買って損はありません