Matplotlib描画備忘録
Matplotlibの機能でよく利用するものを、リスト1のスクリプトに上げておいた。リスト1のスクリプトを実行すると、図1のグラフが描画される。
図1
図1のグラフの描画スクリプトは以下のようである。
リスト1 描画スクリプト
import numpy as np
import matplotlib.pyplot as plt
mux, muy = 50, 5
sgmx, sgmy = 10, 1
rho = 0.5
n = 1000
xy =
np.random.multivariate_normal([mux, muy],
[[sgmx**2,
rho*sgmx*sgmy],
[rho*sgmx*sgmy, sgmy**2]], n)
xy_t = xy.transpose()
X = xy_t[0]
Y = xy_t[1]
coeff = np.polyfit(X, Y, 1)
plt.figure(figsize = (7, 7))
plt.plot(X, Y, 'bo', markersize = 7,
alpha = 0.5, label = '(X,Y)')
plt.xlabel('X', fontsize = 16)
plt.ylabel('Y', fontsize = 16)
plt.plot([0, 100], [coeff[0] * 0.0 +
coeff[1], coeff[0] * 100.0 + coeff[1]],
'g-', linewidth = 3, label ='Y = {0:.3f} * X + {1:.3f}'.format(coeff[0],
coeff[1]))
tickX = np.arange(0, 101, 10)
tickY = np.arange(0, 10.1, 1)
plt.xticks(tickX, fontsize = 14)
plt.yticks(tickY, fontsize = 14)
plt.legend(loc = 2, fontsize = 14)
str_rho = '{}'.format(rho)
plt.title('Samples for $\\rho_{param}$
= ' + str_rho, fontsize = 16)
plt.show()
リスト1のスクリプトでは、まず次のコードで2変量正規分布からの1000個のサンプルを得ている。
mux, muy = 50, 5
sgmx, sgmy = 10, 1
rho = 0.5
n = 1000
xy =
np.random.multivariate_normal([mux, muy],
[[sgmx**2,
rho*sgmx*sgmy],
[rho*sgmx*sgmy, sgmy**2]], n)
相関係数がrho=0.5で、平均が(mux, muy) = (50, 5)、標準偏差が(sgmx, sgmy) = (10, 1)である。
生成された乱数は(n, 2)型行列の形式であるので、これの転置行列xy_tをとり(2, n)型行列の形式に変換した後、第1変数の値をXに、第2変数の値をYに設定している。コードは以下のようである。
xy_t = xy.transpose()
X = xy_t[0]
Y = xy_t[1]
Xを独立変数、Yを従属変数とする単回帰モデルの係数は、次のコードで求められる。
coeff = np.polyfit(X, Y, 1)
傾きはcoeff[0]に、y切片はcoeff[1]に返される。
グラフの画面のサイズ(単位インチ)は、次のコードで設定される。
plt.figure(figsize = (7, 7))
横座標をX、縦座標をYとする散布図を次のコードで描いている。
plt.plot(X, Y, 'bo', markersize = 7,
alpha = 0.5, label = '(X,Y)')
マーカーの大きさと透明度を指定しているが、指定しなかったときはデフォルト値が用いられる。labelの値(文字列)は、legend()を実行すると表示される。
回帰直線は、次のコードで描いている。
plt.plot([0, 100], [coeff[0] * 0.0 +
coeff[1], coeff[0] * 100.0 + coeff[1]],
'g-', linewidth = 3, label ='Y = {0:.3f} * X + {1:.3f}'.format(coeff[0],
coeff[1]))
座標軸の目盛りは、指定されないときはグラフに合わせて自動的に設定されるが、次のように明示的に設定することもできる。
tickX = np.arange(0, 101, 10)
tickY = np.arange(0, 10.1, 1)
plt.xticks(tickX, fontsize = 14)
plt.yticks(tickY, fontsize = 14)
この目盛りの設定は、グラフ描画処理の最後に行う。
グラフの上部にテキストを表示するときは、関数titleを用いる。
str_rho = '{}'.format(rho)
plt.title('Samples for $\\rho_{param}$
= ' + str_rho, fontsize = 16)
Matplotlibでは、文字列にTexを利用することができる。文字列にformat関数を適用するときは、Texにおける{ }とformatにおける{ }が混在するとエラーになるので、上のコードのように分離する必要がある。
なお、保存ボタン(図2)をクリックして描画グラフはファイルに保存することができる。
図2
保存したファイルをWordに取り込むときは、一旦描画ソフト「ペイント」で開いて、コピー・貼り付けを行えばよい。