【Rubyで機械学習】PyCallをインストールしてRubyでmatplotlibを使う

graph

「Rubyでmatplotlibを使いたい!」という人向けの記事です。

Pythonのグラフ描画ライブラリと言えばmatplotlibが有名です。matplotlibは凄い使いやすい!という訳でもありませんが、本格的な綺麗なグラフが描画できます。

また、ユーザが多く情報量が多いこともmatplotlibの良い点と言えるでしょう。

一方、Rubyで有名なグラフ描画ライブラリと言えば、gnuplotgruffなどがあります。これらライブラリのユーザ数は多くないため、情報量が少なくないことが難点と言えるでしょう。

以上のことを考えると、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のドキュメントを参照して下さい。

タイトルとURLをコピーしました