2変数関数のグラフ(3D面グラフ)を作成する

2変数関数のグラフ(3D面グラフ)を作成する #

2変数関数のグラフとして、3D面グラフで表示するにはmpl_toolkits.mplot3dの関数Axes3Dを利用する。

前述の2変数関数を定義するで定義した関数を3D面グラフに表示する例を示す。

>>> 
>>> from mpl_toolkits.mplot3d import Axes3D
>>> 
>>> import math
>>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> 
>>> def f(x,y):
...     return math.sqrt(x**2 + y**2)
... 
>>> 
>>> x = np.linspace(-3,3,61)
>>> y = np.linspace(-3,3,61)
>>> 
>>> z=np.zeros((len(x),len(y)))
>>> 
>>> for xi in range(len(x)):
...     for yi in range(len(y)):
...             z[yi,xi] = f(x[xi],y[yi])
... 
>>> #x,yの交点の座標(格子点)を作成する。xxには格子点のx座標、yyには格子点のy座標が入る
>>> xx,yy = np.meshgrid(x,y)
>>> 
>>> xx
array([[-3. , -2.9, -2.8, ...,  2.8,  2.9,  3. ],
       [-3. , -2.9, -2.8, ...,  2.8,  2.9,  3. ],
       [-3. , -2.9, -2.8, ...,  2.8,  2.9,  3. ],
       ...,
       [-3. , -2.9, -2.8, ...,  2.8,  2.9,  3. ],
       [-3. , -2.9, -2.8, ...,  2.8,  2.9,  3. ],
       [-3. , -2.9, -2.8, ...,  2.8,  2.9,  3. ]])
>>> 
>>> 
>>> yy
array([[-3. , -3. , -3. , ..., -3. , -3. , -3. ],
       [-2.9, -2.9, -2.9, ..., -2.9, -2.9, -2.9],
       [-2.8, -2.8, -2.8, ..., -2.8, -2.8, -2.8],
       ...,
       [ 2.8,  2.8,  2.8, ...,  2.8,  2.8,  2.8],
       [ 2.9,  2.9,  2.9, ...,  2.9,  2.9,  2.9],
       [ 3. ,  3. ,  3. , ...,  3. ,  3. ,  3. ]])
>>> 
>>> # subplot。projection='3d'の指定をする
>>> ax = plt.subplot(1,1,1,projection='3d')
>>>  
>>> # plot_surfaceで3D面グラフをプロットする
>>> ax.plot_surface(xx,yy,z,rstride=1,cstride=1,alpha=0.3,color='blue',edgecolor='black')
<mpl_toolkits.mplot3d.art3d.Poly3DCollection object at 0x11bbfcac8>
>>> 
>>> ax.set_zticks((0,0.2))
[<matplotlib.axis.XTick object at 0x11bbf5400>, <matplotlib.axis.XTick object at 0x1120316a0>]
>>> 
>>> ax.view_init(75,-95)
>>> 
>>> plt.show()
>>> 

実行結果

Axes3Dは3Dグラフを表示するのに使うライブラリである。
plot_surfaceは3次元面グラフを作成するAxes3Dの関数である。plot_surfaceにグラフ表示したいx,y,z座標のデータを入力する。rstride,cstrideには表示するグリッド線の間隔を指定する。