データの特性や性質を理解するには、そのデータを表示してみるのが手っ取り早いでしょう。ここではデータをプロットして、グラフとして表示します。ライブラリmatplotlibは、データをグラフとして表示するための機能を豊富に持っています。
簡単にデータをプロットするには、pyplotモジュールを使います。この中に関数plot()が用意されており、以下のようにx軸とy軸のデータを指定するだけで散布図を作成できます。
plot(x軸に対するデータ, y軸に対するデータ)
また、画面上にこのplot()で作成された散布図を表示するには、関数show()を使います。以下のコードはpyplotをインポートし、plot()で散布図を描き、show()で表示しています。
In
import matplotlib.pyplot as plt
import numpy as np
# np.piは円周率
x = np.linspace(0, 2 * np.pi)
y = np.sin(x)
# x,yをグラフにプロット
plt.plot(x, y)
plt.show()
Out
上のグラフでは、x軸とy軸の表示範囲が自動的に設定されました。この場合、データの各軸における最小値と最大値とが表示範囲になっていて、すべてのデータが表示されます。pyplotモジュールには表示範囲を指定する関数として、x軸に対してxlim()、y軸に対してylim()が用意されています。
以下のコードは、先ほどのグラフでy軸の表示範囲を[-1.5, 1.5]に拡大しています。
In
import matplotlib.pyplot as plt
import numpy as np
# np.piは円周率
x = np.linspace(0, 2 * np.pi)
y = np.sin(x)
# y軸の表示範囲を[-1.5, 1.5]に指定
plt.ylim([-1.5, 1.5])
# x,yをグラフにプロット
plt.plot(x, y)
plt.show()
Out
グラフにはタイトルや軸のラベルが付けられています。pyplotモジュールにはグラフの要素にそれぞれ名前を設定するメソッドが用意されています。例えば、以下のようなメソッドがあります。
pyplot.title("タイトル")
グラフにタイトルを付ける。
pyplot.xlabel("x軸のラベル")
グラフのx軸にラベルを付ける。
以下のコードはグラフにタイトルを付け、x軸とy軸にラベルを付けます。
In
import matplotlib.pyplot as plt
import numpy as np
# np.piは円周率
x = np.linspace(0, 2 * np.pi)
y = np.sin(x)
# グラフのタイトルに指定
plt.title("sin plot")
# グラフのx軸とy軸にラベルを指定
plt.xlabel("x")
plt.ylabel("y")
# y軸の表示範囲を[-1.5, 1.5]に指定
plt.ylim([-1.5, 1.5])
# x,yをグラフにプロット
plt.plot(x, y)
plt.show()
Out
グラフにグリッド(格子)を入れると、見やすくなることがあります。pyplotのgrid()メソッドを使うと、グラフにグリッドを入れることができます。
In
import matplotlib.pyplot as plt
import numpy as np
# np.piは円周率
x = np.linspace(0, 2 * np.pi)
y = np.sin(x)
# グラフのタイトルに指定
plt.title("sin plot")
# グラフのx軸とy軸にラベルを指定
plt.xlabel("x")
plt.ylabel("y")
# y軸の表示範囲を[-1.5, 1.5]に指定
plt.ylim([-1.5, 1.5])
# グラフにグリッドを入れる
plt.grid(True)
# x,yをグラフにプロット
plt.plot(x, y)
plt.show()
Out
ライブラリmatplotlibでグラフをプロットした場合、横軸と縦軸には自動的に目盛りが付されます。各軸に対してうまい具合に目盛りが付けられるようになっていますが、データの種類によってはうまく行かない場合もあります。そこで、目盛りを挿入する位置を指定します。
pyplot.xticks(目盛りを挿入する位置、挿入する目盛り)
目盛りをx軸に挿入する。
pyplot.yticks(目盛りを挿入する位置、挿入する目盛り)
目盛りをy軸に挿入する。
以下のコードは、グラフのx軸に目盛りを設定します。
In
import matplotlib.pyplot as plt
import numpy as np
# np.piは円周率
x = np.linspace(0, 2 * np.pi)
y = np.sin(x)
# グラフのタイトルに指定
plt.title("sin plot")
# グラフのx軸とy軸にラベルを指定
plt.xlabel("x")
plt.ylabel("y")
# y軸の表示範囲を[-1.5, 1.5]に指定
plt.ylim([-1.5, 1.5])
# グラフにグリッドを入れる
plt.grid(True)
# 位置とラベルを設定する
x_pi = np.pi
x_position = [0, x_pi/2, x_pi, x_pi*3/2, x_pi*2]
x_label = ["0", "90", "180", "270", "360"]
plt.xticks(x_position, x_label)
# x,yをグラフにプロット
plt.plot(x, y)
plt.show()
Out
1つのグラフに複数のデータをプロットしたいときがあります。データが2種類あれば、それらはグラフの上で区別さえなけらばいけません。そこで、色を使います。pyplotモジュールのplot()には、プロットの色を指定する引数が用意されています。
pyplot.plot(x, y, color = "色")
plot()に、異なる変数を使って複数回データを渡すと、その都度、異なるプロットを描きます。色は基本、r:赤、g:緑、b:青、y:黄のような文字で指定します。
次のコードは、変数(x, y1)のデータを赤色で、変数(x, y2)のデータを青色でプロットします。横軸に変数xを、縦軸に変数y1及びy2を対応させます。
In
import matplotlib.pyplot as plt
import numpy as np
# np.piは円周率
x = np.linspace(0, 2 * np.pi)
y1 = np.sin(x)
y2 = np.cos(x)
# グラフのタイトルに指定
plt.title("sin and cos plot")
# グラフのx軸とy軸にラベルを指定
plt.xlabel("x")
plt.ylabel("y")
# y軸の表示範囲を[-1.5, 1.5]に指定
plt.ylim([-1.5, 1.5])
# グラフにグリッドを入れる
plt.grid(True)
# 位置とラベルを設定する
x_pi = np.pi
x_position = [0, x_pi/2, x_pi, x_pi*3/2, x_pi*2]
x_label = ["0", "90", "180", "270", "360"]
plt.xticks(x_position, x_label)
# x,yをグラフにプロット
plt.plot(x, y1, color = "r")
plt.plot(x, y2, color = "b")
plt.show()
Out
1つのグラフの中に複数のデータを表示したとして、グラフ上でそれらが何を表すかを示す必要があります。pyplotモジュールのlegend()は、グラフ内に凡例を表示します。
legend( ["label1", "label2", ...] )
先のコードに、このlegend()で、凡例のラベルを設定します。注意点は、legend()を、グラフプロットするplot()の後に配置することです。
In
import matplotlib.pyplot as plt
import numpy as np
# np.piは円周率
x = np.linspace(0, 2 * np.pi)
y1 = np.sin(x)
y2 = np.cos(x)
# グラフのタイトルに指定
plt.title("sin and cos plot")
# グラフのx軸とy軸にラベルを指定
plt.xlabel("x")
plt.ylabel("y")
# y軸の表示範囲を[-1.5, 1.5]に指定
plt.ylim([-1.5, 1.5])
# グラフにグリッドを入れる
plt.grid(True)
# 位置とラベルを設定する
x_pi = np.pi
x_position = [0, x_pi/2, x_pi, x_pi*3/2, x_pi*2]
x_label = ["0", "90", "180", "270", "360"]
plt.xticks(x_position, x_label)
# x,yをグラフにプロット
plt.plot(x, y1, color = "r")
plt.plot(x, y2, color = "b")
# 凡例のラベルを設定する
plt.legend(["y = sin(x)", "y = cos(x)"])
plt.show()
Out
描画するグラフの大きさを変えることができます。グラフの大きさを変えるには、pyplotモジュールのfigure()でグラフのサイズを指定します。注意点は、大きさの指定に単位インチを使うことと、pyplot関連の一連の関数を実行する前に配置することです。
Figure(figsize = (横の大きさ, 縦の大きさ))
In
import matplotlib.pyplot as plt
import numpy as np
# np.piは円周率
x = np.linspace(0, 2 * np.pi)
y1 = np.sin(x)
y2 = np.cos(x)
# グラフの大きさを設定する <--- ココ
plt.figure(figsize = (4, 3))
# グラフのタイトルに指定
plt.title("sin and cos plot")
# グラフのx軸とy軸にラベルを指定
plt.xlabel("x")
plt.ylabel("y")
# y軸の表示範囲を[-1.5, 1.5]に指定
plt.ylim([-1.5, 1.5])
# グラフにグリッドを入れる
plt.grid(True)
# 位置とラベルを設定する
x_pi = np.pi
x_position = [0, x_pi/2, x_pi, x_pi*3/2, x_pi*2]
x_label = ["0", "90", "180", "270", "360"]
plt.xticks(x_position, x_label)
# x,yをグラフにプロット
plt.plot(x, y1, color = "r")
plt.plot(x, y2, color = "b")
# 系列ラベルを設定する
plt.legend(["y = sin(x)", "y = cos(x)"])
plt.show()
Out
一つの描画領域に複数のグラフを描画します。この複数の小さな領域に描画されるグラフをサブプロットといいます。サブプロットを作成するには、描画領域を分割するレイアウトと、どのサブプロットかを位置で指定します。
例えば、描画領域として横12インチ、縦9インチの大きさを確保します。その中を2行3列に分割し、2行目の2列目(左上端から5番目)に配置したいなら、以下のように指定します。
fig = figure(12, 9)
ax = fig.add_subplot(2, 3, 5)
変数figを用意し、サブプロットを作成した上で、変数axに代入します。注意点は、グラフの大きさの設定や、レイアウトとそのどのサブプロットかの位置の指定は、pyplot関連の一連の関数を実行する前に配置することです。
In
import matplotlib.pyplot as plt
import numpy as np
# np.piは円周率
x = np.linspace(0, 2 * np.pi)
y1 = np.sin(x)
y2 = np.cos(x)
# グラフの大きさを設定する
fig = plt.figure(figsize = (12, 9))
# レイアウト2×3の2行目2列目にサブプロットを作る
ax = fig.add_subplot(2, 3, 5)
# x,yをグラフにプロット
ax.plot(x, y1, color = "r")
ax.plot(x, y2, color = "b")
# 空白部分をサブプロットで埋める
for i in range(6):
if i != 4: # 5番目(2行目2列目)
fig.add_subplot(2, 3, i+1)
plt.show()
Out