科学計算では必須なプロット。Pythonではmatplotlibというライブラリを使ってプログラム中でプロットを出力できます。今後、必要になるであろうプロットの形式をいくつか試してみました。
2次元プロット
三角関数。作った配列に対してガバッと計算できます。レンジの設定、ラベルの設定、TeXの使用、ラベルのフォントサイズ、画像ファイルとして保存とか。
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の数字に重なってしまうので指数表記にした。
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の置き換えとか。
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
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
1.4. Matplotlib: 作図 — Scipy lecture notes
How-To — Matplotlib 1.5.1 documentation
Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理
- 作者: Wes McKinney,小林儀匡,鈴木宏尚,瀬戸山雅人,滝口開資,野上大介
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/12/26
- メディア: 大型本
- この商品を含むブログ (12件) を見る