読者です 読者をやめる 読者になる 読者になる

tsujimotterの下書きノート

このブログは「tsujimotterのノートブック」の下書きです。数学の勉強過程や日々思ったことなどをゆるーくメモしていきます。下書きなので適当です。

記事一覧はこちらです。このブログの趣旨はこちら

メインブログである「tsujimotterのノートブログ」はこちら

Mac OSX に ruby-gruff を入れようとして色々はまった話

「Ruby でグラフが書きたい」からすべてははじまった。長い長い旅の記録を私にしか分からないレベルの文章で、備忘録として書き留めておく。


Gruff という Gem があってこれが便利そう。d.conma.me



というわけで、さっそくインストール

$ gem install rmagick

「パーミッションがない」的なことを言われるのである。

これまでは、gem をインストールする際に、sudo をつけることを常習していたのだが、これはあまりよくない気がしていた。なぜなら大抵の解説では sudo を使わないでコマンドが記されているからだ。

そこで、そもそも ruby の環境を見直すことにした。

まず rbenv から

色々なところで、mac で ruby を使うなら rbenv だろう、という記述をみたので、その通りにしたがうことにする。

そもそも、私の Mac に入っていた ruby は元々どうやって入れたか分からない。が、rbenv を入れれば、特に古い物をアンインストールする必要もなく、新しい環境の ruby を用いることが出来る。

以降の説明は homebrew がインストールされていることが前提である。homebrew 自体はこの目的に限らず汎用的に使えるので入れておいて損は無いように思う。

$ brew install rbenv ruby-build
$ rbenv install 2.0.0-p598
$ rbenv global 2.0.0-p598
$ ruby -v

ちなみに、ruby 2.0.0 を入れたのは好みなので、異なるバージョンでもよい。

$ ruby -v
ruby 2.0.0p598 (2014-11-13 revision 48408) [x86_64-darwin13.4.0]
$ which ruby
/Users/tsujijunpei/.rbenv/shims/ruby
$ which gem
/Users/tsujijunpei/.rbenv/shims/gem

みたいに出れば成功だと思う。


この辺は以下の記事を参考にした。qiita.com

rmagick を入れる下準備

$ brew link libtool
$ brew install imagemagick
$ brew install pkg-config

以下の2つを参考に。qiita.com
qiita.com

rmagick を入れる

$ gem install hoe
$ gem install rmagick
ERROR:  Error installing rmagick:
	ERROR: Failed to build gem native extension.

みたいなエラーが出て困った。

ただ、エラーの下の方を見ていくと、

checking for outdated ImageMagick version (<= 6.4.9)... no
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
...
Can't install RMagick 2.15.4. Can't find the ImageMagick library or one of the dependent libraries. Check the mkmf.log file for more detailed information.

みたいになっていて、どうやら brew install した ImageMagick が読めてないっぽい。

で調べていくと、

export PKG_CONFIG_PATH=/usr/local/Cellar/imagemagick/6.9.0-3/lib/pkgconfig/
gem install rmagick

のようにすると解決するらしいことがわかったので、やってみた。

unable to convert "\xCF" from ASCII-8BIT to UTF-8 for ...

みたいなのがいっぱい出るかもしれないが、気にしない。とりあえず、rmagick はインストールできたっぽい。


上の2つの記事と以下の記事を参考に解決した。blog.cloudpack.jp

gruff

ようやくここで、gruff をインストールできる。

$ gem install gruff

ここまでくれば、問題なくインストールできるはず。・・・できるはず。


ようやく ruby を実行するときがきた。

require 'rubygems'
require 'gruff'

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

g.data("Apples", [1, 2, 3, 4, 4, 3])
g.data("Oranges", [4, 8, 7, 9, 8, 9])
g.data("Watermelon", [2, 3, 1, 5, 6, 8])
g.data("Peaches", [9, 9, 10, 8, 7, 9])

g.labels = {0 => '2003', 2 => '2004', 4 => '2005'}

g.write('my_fruity_graph.png')


コードはこれを参考にした。d.hatena.ne.jp


このコードを my_fruity_graph.rb のようなファイルに保存しておいて、以下のコマンドを叩こう

$ ruby my_fruity_graph.rb

人によっては、何も表示されずにグラフの画像が同じディレクトリに 'my_fruity_graph.png' として保存されているだろう。これで完成だ。

ところが、私の環境ではそうはいかなかった。

フォントが無い

以下のようなエラーが出たからだ。

/Users/tsujijunpei/.rbenv/versions/2.0.0-p598/lib/ruby/gems/2.0.0/gems/gruff-0.6.0/lib/gruff/base.rb:1124:in `get_type_metrics': unable to read font `(null)' @ error/annotate.c/RenderFreetype/1153: `(null)' (Magick::ImageMagickError)

フォントがないというようなエラーである。


調べてみると GhostScript をインストールすればいいとのこと。

$ brew install ghostscript

これを参考にした。qiita.com
stackoverflow.com


一般には、これで問題ないと思う。ところが、私の環境ではそうはいかなかった。

TeX Shop を既に入れていたのだ。


上のコマンドを実行すると「インストールはしたけどリンクは失敗した。先客がおってオーバーライトでけへん」みたいなエラーが出る。


世の中にはちゃんと解決策があるものだ。

BakedMemo: Homebrewの前にMacTexを入れてしまった

$ brew link --overwrite --dry-run ghostscript
$ brew link --overwrite ghostscript

とするとパーミッション系の問題が起きるので、

$ sudo chown -R ユーザ名:admin /usr/local/share/ghostscript
$ brew link ghostscript

としてあげる。

これで TeX Shop も問題なく動く。


日本語も使える

たとえば、日本語が入ったグラフを使いたいとする。そのときは、

g.font = "./ヒラギノ角ゴ Pro W3.otf" 

のように具体的にフォントのパスを指定してあげれば良い。ちなみにヒラギノはオープンタイプなので .otf だが、.ttc みたいなものを選んでも良い。

パスの指定方法は相対パスでも絶対パスでも良い。上の例は相対パスにしてある。ただし、この場合は同じディレクトリにフォントファイルが必要だから注意である。


以下のようなコード "yen_gruff.rb" を書けば、日本語の入ったグラフ("yen.png")がかける。

require 'rubygems'
require 'gruff'


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

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

#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')


コードはこちらを参考にした。d.conma.me


作品

これが作りたかった。

f:id:tsujimotter:20150903041912p:plain:w500

ソースコードはこちら。
http://tsujimotter-sub.hatenablog.com/entry/2015/09/03/031233 · GitHub