グラフ描画(Matplotlib)

 Pythonで人工知能(AI)開発を行う場合、データがどのようなものか視覚的に知っておきたいことがあります。具体的にはデータをグラフとして描画するのですが、様々な見せ方があります。まずは、中学校で習った1次関数(直線)の表示から始めます。点をたくさん打って線に見せるような描き方です。知識より実務寄りです。E資格だけを考えるとあまり重要ではありませんが、こんなことできないかな?と遊び感覚で(コードはオリジナル)。

機械学習ライブラリ(入門編)

『機械学習ライブラリ(入門編)』に戻る>>

視覚化はデータとイメージをつなぎます

基本

線を引く

まずは簡単に線分です。np.linspaceは指定区間で点を打ちます。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-10, 10, 50) #-10~10の間に50個の点
y = x * 2
plt.plot(x, y)
plt.show()
Matplotlibでの直線の描画

窓を2つ用意する

複数の窓を用意して、別々に描画します。三角関数np.sinnp.cosを使いました。
import numpy as np
import matplotlib.pyplot as plt
x = np.radians(np.linspace(-180,180,50))
y = np.sin(x)
z = np.cos(x)
#1つ目の窓
plt.subplot(121) #"1"行"2"列の窓の"1"番目
plt.plot(x, y) #sinの方を描画
#2つ目の窓
plt.subplot(122) #"1"行"2"列の窓の"2"番目
plt.plot(x, z) #cosの方を描画
plt.show()
Matplotlibで2つのグラブを描画

タイトルを書いたり、軸や目盛りもプロットできるようです。

発展

データの形を見せる

 集計よってデータの形を見せることができます。例として、ヒストグラムを使って標準正規分布の特徴を表します。

import numpy as np
import matplotlib.pyplot as plt
x = np.random.randn(1000)
plt.hist(x)
plt.show()
Matplotlibでのヒストグラム表示

ランダム値を1000個ぐらい取ってくれば、山なりの形が見えてきます。

変化を見せる

時間軸を加えれば、変化を見せることもできます。animationを使いました。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig = plt.figure()
x = np.radians(np.linspace(0,360,1000))
ims = [plt.plot(x, np.sin(n*x), animated=True) for n in range(10)]
ani = animation.ArtistAnimation(fig, ims, interval=500, repeat_delay=1000, blit=True)
plt.show() #GUI環境の場合【補足】を参照

Matplotlibでのアニメーション例

for文の内包表記を使って、list配列にplotした情報を詰め込みました。Pythonの復習をしてみてください。

立体

 三角関数を使っていると、円柱も描けるような気がしました。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

#fig作成
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.view_init(azim=20,elev=20)

#図形回転
def spin(i):
    x = i if i < 25 else 24
    y = 0 if i < 25 else i-24
    ax.view_init(azim=20+x,elev=20+y)

#円柱
def plot():
    x = np.cos(np.radians(np.linspace(-180*50, 180*50, 10000)))
    y = np.sin(np.radians(np.linspace(-180*50, 180*50, 10000)))
    z = 1/1000 * np.arange(10000)
    ax.plot(x, y, z)

#表示
ani = animation.FuncAnimation(fig, init_func=plot, func=spin, frames=range(50),interval=100, repeat_delay=1000)
plt.show() #GUI環境の場合【補足】を参照
Matplotlibでの3D画像

seabornのようにグラフに特化したライブラリもあります。

補足

GUI環境でのアニメーション

Jupyter Notebook』 『Google Colaboratory』 の場合、plt.show()の代わりに、以下コードを利用してください。
#plt.show()の代わりに
from matplotlib import rc
from IPython.display import HTML
rc('animation', html='jshtml')
plt.close()
ani

『機械学習ライブラリ(入門編)』に戻る>>

以上