【Python】3次元のグラフ #1
数値を色で表現する
初めに、「【Python】等高線の表示」でも使った、以下の2変数関数を定義する。
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
def f3(x0,x1):
ans = (2 * x0**2 + x1**2) * np.exp(-(2 * x0**2 + x1**2))
return ans
9x9の0で初期化された行列yを用意して、各要素に関数f3()の演算結果を格納する。
xn = 9
x0 = np.linspace(-2, 2, xn)
x1 = np.linspace(-2, 2, xn)
y = np.zeros((len(x0), len(x1)))
for i0 in range(xn):
for i1 in range(xn):
y[i1, i0] = f3(x0[i0], x1[i1])
行列yの値を少数第一位まで表示して確認。
print(np.round(y,1))
出力結果:
[[0. 0. 0. 0. 0.1 0. 0. 0. 0. ]
[0. 0. 0.1 0.2 0.2 0.2 0.1 0. 0. ]
[0. 0. 0.1 0.3 0.4 0.3 0.1 0. 0. ]
[0. 0. 0.2 0.4 0.2 0.4 0.2 0. 0. ]
[0. 0. 0.3 0.3 0. 0.3 0.3 0. 0. ]
[0. 0. 0.2 0.4 0.2 0.4 0.2 0. 0. ]
[0. 0. 0.1 0.3 0.4 0.3 0.1 0. 0. ]
[0. 0. 0.1 0.2 0.2 0.2 0.1 0. 0. ]
[0. 0. 0. 0. 0.1 0. 0. 0. 0. ]]
pcolorを使用してこれらの数値を色で表現する。
plt.figure(figsize=(3.5,3))
plt.gray()
plt.pcolor(y)
plt.colorbar()
plt.show()
中心の要素が0なので真ん中が黒くなり、ドーナツ型の画像が得られた。
関数の表面を面で表す
次に立体的なイメージをつかむため、関数を面で表す。
mpl_toolkits.mplot3dのライブラリからAxes3Dをインポートしてプロットする。
from mpl_toolkits.mplot3d import Axes3D
xn=50 #解像度
xx0,xx1=np.meshgrid(x0,x1)
plt.figure(figsize=(5,3.5))
ax=plt.subplot(1,1,1,projection='3d')
ax.plot_surface(xx0,xx1,y,rstride=5,cstride=5,alpha=0.3,color='blue',edgecolor='black')
ax.set_zticks((0,0.2))
ax.view_init(75,-95)
plt.show()
すると、以下のようなグラフが得られる。
ax.view_init(75,-95)はこのグラフの表示角度を指定している。
この記事が気に入ったらサポートをしてみませんか?