「Rubyでmatplotlibを使いたい!」という人向けの記事です。
Pythonのグラフ描画ライブラリと言えばmatplotlibが有名です。matplotlibは凄い使いやすい!という訳でもありませんが、本格的な綺麗なグラフが描画できます。
また、ユーザが多く情報量が多いこともmatplotlibの良い点と言えるでしょう。
一方、Rubyで有名なグラフ描画ライブラリと言えば、gnuplotやgruffなどがあります。これらライブラリのユーザ数は多くないため、情報量が少なくないことが難点と言えるでしょう。
以上のことを考えると、Rubyでもmatplotlibを使えると便利です。
そこでRuby-PythonブリッジライブラリPyCallを使用します。PyCallを用いればRubyでPythonのライブラリを使用することが可能になります。そのため、Rubyでもmatplotlibを使用してグラフを作成することが可能になります。
今回は、Rubyでmatplotlibを使い倒す為に、PyCallの使い方を解説します。
PyCallのインストール
Pycallのインストールはgemパッケージを入れるだけで完了です。
gem install pycall
matplotlibを使ってグラフを描画
プロットする際に渡す配列は、Numpy配列でも、Rubyの配列でもOKです。
基本的な使い方は、Pythonでmatplotlibを使用する時と同じです。 Pythonでの書き方と異なる点は、プロットする際の引数設定では、”=”でなく”:”を使用する事です。
# coding: utf-8
require "pycall/import"
include PyCall::Import
pyimport 'matplotlib.pyplot', as: "plt"
pyimport 'numpy', as: "np"
#Rubyの配列
x1 = (0..20).map{|i| i}
y1 = x1.map{|i| i**2}
#numpy配列
x2 = np.array(np.arange(0, 21))
y2 = x2 * 2.5
#rcParamsでグラフの外観を設定
plt.rcParams["xtick.direction"] = "in"
#Subplotで複数グラフを描画。
#figsize=(10,15)でなくfigsize: [10, 15]のように書く。
#引数設定は"="でなく":"を使う。
fig = plt.figure(figsize:[10,15], tight_layout: true)
fig.subplots_adjust(wspace: 2, hspace: 2)
ax1 = fig.add_subplot(211, xlim:[0, 20])
#"="でなく、":"を使うこと。aixs="both"でなく、axis: "both"のように。
ax1.tick_params(axis: "both", which: "major", length: 4.5, width: 1.5)
ax1.set_xlabel("X", fontsize: 17, labelpad: 10)
ax1.set_ylabel("Y", fontsize: 17, labelpad: 10)
#Rubyの配列を使ってプロット
ax1.plot(x1, y1)
#2個目のグラフ作成
ax2 = fig.add_subplot(212)
ax2.set_xlabel("X", fontsize: 17, labelpad: 10)
ax2.set_ylabel("Y", fontsize: 17, labelpad: 10)
#Numpy配列を使ってプロット
ax2.plot(x2, y2)
plt.show()
基本的な使い方は上記コードのような感じです。上のコードを実行して出来上がるグラフは下記の通りです。
グラフの細かい設定はmatplotlibのドキュメントを参照して下さい。