見出し画像

【Python】3次元のグラフ #1

数値を色で表現する

初めに、「【Python】等高線の表示」でも使った、以下の2変数関数を定義する。

画像3

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()

画像1

中心の要素が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()

すると、以下のようなグラフが得られる。

画像2

ax.view_init(75,-95)はこのグラフの表示角度を指定している。

この記事が気に入ったらサポートをしてみませんか?