cBlog

Tips for you.

Pythonでプロット(matplotlib | NumPy)

科学計算では必須なプロット。Pythonではmatplotlibというライブラリを使ってプログラム中でプロットを出力できます。今後、必要になるであろうプロットの形式をいくつか試してみました。

 

2次元プロット

三角関数。作った配列に対してガバッと計算できます。レンジの設定、ラベルの設定、TeXの使用、ラベルのフォントサイズ、画像ファイルとして保存とか。

f:id:cruller:20160223222356p:plain

 

sinx.py
import numpy as np
import matplotlib.pyplot as plt 

x = np.arange(-np.pi, np.pi, np.pi/100)  # start, stop, step
y = np.sin(x)

plt.plot(x, y)

# Range
plt.xlim(-np.pi, np.pi)
plt.ylim(-1.5, 1.5)

plt.xlabel(r'$x$', fontsize=24)  # TeXも使える
plt.ylabel(r'$\sin x$', fontsize=24)

plt.savefig('sinx.png', dpi=144)
plt.show()

 

 

3次元プロット(ワイヤーフレーム)

多変量正規分布。zラベルがtickの数字に重なってしまうので指数表記にした。

f:id:cruller:20160223222415p:plain

 

multivariate_normal.py
import numpy as np
from scipy.stats import multivariate_normal
import matplotlib.pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D

X, Y = np.mgrid[10:90:2, 40:160:3]
pos = np.empty(X.shape + (2,))
pos[:, :, 0] = X  # x座標
pos[:, :, 1] = Y  # y座標
rv = multivariate_normal([50, 100], [[100, 0], [0, 225]])  # 確率変数
Z = rv.pdf(pos)

fig = plt.figure()
ax = Axes3D(fig)
ax.plot_wireframe(X, Y, Z)

ax.set_xlabel(r'$x$', fontsize=24)
ax.set_ylabel(r'$y$', fontsize=24)
ax.set_zlabel(r'$f(x, y)$', fontsize=24)
plt.ticklabel_format(style='sci', axis='z', scilimits=(0, 0))  # 指数表記

plt.savefig('multivariate_normal.png', dpi=144)
plt.show()

 

 

3次元プロット(カラーマップ)

乱数のプロット。2次元FFTとかに。カラーバーの追加、プロットエリアのサイズ調整、tickの置き換えとか。

f:id:cruller:20160223222430p:plain

 

rand.py
import numpy as np
import matplotlib.pyplot as plt 
from matplotlib import cm

Z = np.random.rand(128, 128)  # 128x128の一様乱数

# extent: 座標[left, right, bottom, top]
plt.imshow(Z, cmap=cm.gray, interpolation='nearest', vmin=0, vmax=1,
           extent=[-np.pi, np.pi, -np.pi, np.pi])
cbar = plt.colorbar()

# plotの大きさを調整
plt.subplots_adjust(bottom=0.15)

plt.xticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])
plt.yticks([-np.pi, -np.pi/2, 0, np.pi/2, np.pi],
           [r'$-\pi$', r'$-\pi/2$', r'$0$', r'$\pi/2$', r'$\pi$'])

plt.xlabel(r'$x$', fontsize=24)
plt.ylabel(r'$y$', fontsize=24)
cbar.set_label(r'$z$', fontsize=24)

plt.savefig('rand.png', dpi=144)
plt.show()

 

 

はー、疲れた( ´Д`)y─┛~~

 

 

参考

matplotlib 入門 — matplotlib 1.0 documentation

 

bicycle1885.hatenablog.com

 

d.hatena.ne.jp

 

scipy.stats.multivariate_normal — SciPy v0.14.0 Reference Guide

 

mplot3d example code: scatter3d_demo.py — Matplotlib 1.5.1 documentation

 

pyplot — Matplotlib 1.5.1 documentation

 

seesaawiki.jp

 

1.4. Matplotlib: 作図 — Scipy lecture notes

 

How-To — Matplotlib 1.5.1 documentation

 

 

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

 
広告