2019年2月12日火曜日

Ruby でグラフを書く gruff 入門

概要

Ruby の gruff というライブラリを使ってグラフの描画を行ってみました
中身は ImageMagick を使っています

環境

  • macOS 10.14.2
  • Ruby ruby 2.5.1p57
  • imagemagick 6.9.10-14

ImageMagick インストール

  • brew install imagemagick@6
  • brew link --force imagemagick@6

RaspberryPi の場合は

  • apt -y install libmagickcore-dev libmagickwand-dev

gruff インストール

  • bundle init
  • vim Gemfile
gem "gruff"
  • bundle install --path vendor

Getting Started

とりあえずサンプルを丸パクリして動かしてみます

  • vim app.rb
require 'gruff'

g = Gruff::Line.new(400)
g.title = 'Transparent Background'
g.theme = {
  :colors => %w(black grey),
  :marker_color => 'grey',
  :font_color => 'black',
  :background_colors => 'transparent'
}

g.labels = {
  0 => '5/6',
  1 => '5/15',
  2 => '5/24',
  3 => '5/30',
}
g.data(:apples, [-1, 0, 4, -4])
g.data(:peaches, [10, 8, 6, 3])
g.write('line_transparent.png')
  • open line_transparent.png

でこんな感じのグラフが作成できます

Gruff::Line.new(400)width=400 の折れ線グラフを作成します
title はその名の通りタイトルを設定します
thema でグラフの色や背景の色を設定することができます
色はカラーコードでも指定可能です
:background_colors => 'transparent' にすると背景を透過にできます
colorsdata で追加した分配列で指定すると折れ線グラフの色をそれぞれ指定できます
marker_color は横に引かれている軸の線の色を指定することができます
font_color はタイトルや軸の文字色を設定することができます
labels は横軸のデータを指定します
0 からインデックスを初めてデータ分だけインクリメントして設定します
data はグラフを描画するためのデータです
データの名前を指定したあとにプロットするデータを配列で指定します

あとは write すればグラフが png 形式で出力されます

その他のパラメータ

  • hide_title = true

タイトルを非表示にできます

  • legend_font_size = 12

data で指定した名前は凡例として表示されます
その凡例のフォントサイズを指定できます

  • marker_font_size = 16

縦横軸のラベルのフォントサイズを指定します

  • hide_dots = true

折れ線グラフなどでデータのプロット部分にドットを打つかどうか指定できます

  • y_axis_increment = 1

縦軸の増加分を指定できます

  • g.reference_line_default_width = 1
  • g.reference_lines[:baseline] = { :value => 5 }
  • g.reference_lines[:little] = { :value => 3 }
  • g.reference_lines[:horiz_one] = { :index => 1, :color => 'green' }
  • g.reference_lines[:horiz_two] = { :index => 3, :color => 'green' }

特定の縦 or 横軸に点線を引くことができます
reference_line_default_width は点線の太さです
reference_lines[:baseline] などで点線の種類を指定できます
value => 5 と指定することで縦軸の 5 の値のところに点線を引くことができます
reference_lines[:horiz_one] を指定することで横軸に点線 (縦線) を引くことができます
ちなみに reference_lines[:baseline]baseline_value = 10 でも代用できます

  • g.theme_37signals

テーマにはいろいろとアセットがありそれを指定することもできます
theme_keynote, theme_rails_keynote, theme_odeo, theme_pastel, theme_greyscale などがあります
また g.theme = Gruff::Themes::THIRTYSEVEN_SIGNALS と指定しても OK です

縦軸の単位を設定するのは現状だとできないようです
https://github.com/topfunky/gruff/pull/93
この p-r がマージされれば使えるようになります
もしくは自分でコードを修正してもいいと思います

最後に

Ruby + Gruff で折れ線グラフを描画してみました
グラフの種類は他にも円グラフやチャートグラフ、棒グラフもあるので詳しくは参考サイトにあるサンプル一覧を見てください
どれも同じような感じで描画することができます

参考サイト

0 件のコメント:

コメントを投稿