1. 程式人生 > >【python學習筆記】12:用matplotlib繪製3D函式影象

【python學習筆記】12:用matplotlib繪製3D函式影象

①用pyplot的figure()函式可以建立一個figure物件

②以它為引數建立Axes3D物件,使之具有3D座標軸

③pyplot的show()方法可以顯示所有figure物件

*顯示兩個3D座標軸

import matplotlib.pyplot as plt #繪圖用的模組
from mpl_toolkits.mplot3d import Axes3D #繪製3D座標的函式
fig1=plt.figure()#建立一個繪圖物件
ax=Axes3D(fig1)#用這個繪圖物件建立一個Axes物件(有3D座標)
fig2=plt.figure()#建立一個繪圖物件
ax=Axes3D(fig2)#用這個繪圖物件建立一個Axes物件(有3D座標)
plt.show()#顯示模組中的所有繪圖物件

執行結果:


①用numpy的arange()方法分別建立橫座標,縱座標可能的取樣點值,分別放入兩個arange物件中

②用numpy的meshgrid()方法去建立全部的取樣點放入之前的兩個arange物件中

*建立和擴充取樣點橫縱座標

'''import matplotlib.pyplot as plt #繪圖用的模組
from mpl_toolkits.mplot3d import Axes3D #繪製3D座標的函式'''
import numpy as np
'''fig1=plt.figure()#建立一個繪圖物件
ax=Axes3D(fig1)#用這個繪圖物件建立一個Axes物件(有3D座標)'''
X=np.arange(-2,2,1)
Y=np.arange(-2,2,1)#建立了從-2到2,步長為1的arange物件
#至此X,Y分別表示了取樣點的橫縱座標的可能取值
print ("X為",X)
print ("Y為",Y)
#用這兩個arange物件中的可能取值一一對映去擴充為所有可能的取樣點
X,Y=np.meshgrid(X,Y)
print ("擴充後X為")
print (X)
print ("擴充後Y為")
print (Y)
'''plt.show()#顯示模組中的所有繪圖物件'''

執行結果:



①用儲存取樣點橫縱座標的arange物件,傳入事先寫好的函式,返回給Z,從而為取樣點的Z座標打表

②將三個表傳入ax.plot_surface()函式中去用取樣點構建曲面,rstride和cstride表示行列隔多少個取樣點建一個小面,cmap表示繪製曲面的顏色,在pylot.cm下有很多選項可以選擇

附:pylot.title()可以設定總標題,ax.set_xlabel()可以為x座標註釋,y/z同理。

*取樣點Z座標打表,按取樣點顯示曲面

import matplotlib.pyplot as plt #繪圖用的模組
from mpl_toolkits.mplot3d import Axes3D #繪製3D座標的函式
import numpy as np

def fun(x,y):
    return np.power(x,2)+np.power(y,2)

fig1=plt.figure()#建立一個繪圖物件
ax=Axes3D(fig1)#用這個繪圖物件建立一個Axes物件(有3D座標)
X=np.arange(-2,2,0.1)
Y=np.arange(-2,2,0.1)#建立了從-2到2,步長為0.1的arange物件
#至此X,Y分別表示了取樣點的橫縱座標的可能取值
#用這兩個arange物件中的可能取值一一對映去擴充為所有可能的取樣點
X,Y=np.meshgrid(X,Y)
Z=fun(X,Y)#用取樣點橫縱座標去求取樣點Z座標
plt.title("This is main title")#總標題
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.cm.coolwarm)#用取樣點(x,y,z)去構建曲面
ax.set_xlabel('x label', color='r')
ax.set_ylabel('y label', color='g')
ax.set_zlabel('z label', color='b')#給三個座標軸註明
plt.show()#顯示模組中的所有繪圖物件

執行結果:



補充:用numpy的mgrid可以將建立取樣點橫縱座標和擴充取樣點這兩項工作合併起來做,語法如下:

X,Y=numpy.mgrid[X的取樣下限:X的取樣上限:X的分割數j,Y的取樣下限:Y的取樣上限:Y的分割數j]

另外,ax.plot_surface()裡有一個引數alpha可以設定不透明度。

*建立和擴充合併做,設定不透明度為0.5

import matplotlib.pyplot as plt #繪圖用的模組
from mpl_toolkits.mplot3d import Axes3D #繪製3D座標的函式
import numpy as np

def fun(x,y):
    return np.power(x,2)+np.power(y,2)

fig1=plt.figure()#建立一個繪圖物件
ax=Axes3D(fig1)#用這個繪圖物件建立一個Axes物件(有3D座標)
'''X=np.arange(-2,2,0.1)
Y=np.arange(-2,2,0.1)#建立了從-2到2,步長為0.1的arange物件
#至此X,Y分別表示了取樣點的橫縱座標的可能取值
#用這兩個arange物件中的可能取值一一對映去擴充為所有可能的取樣點
X,Y=np.meshgrid(X,Y)'''
X,Y=np.mgrid[-2:2:40j,-2:2:40j]#從-2到2分別生成40個取樣座標,並作滿射聯合
Z=fun(X,Y)#用取樣點橫縱座標去求取樣點Z座標
plt.title("This is main title")#總標題
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.cm.coolwarm,alpha=0.5)#用取樣點(x,y,z)去構建曲面
ax.set_xlabel('x label', color='r')
ax.set_ylabel('y label', color='g')
ax.set_zlabel('z label', color='b')#給三個座標軸註明
plt.show()#顯示模組中的所有繪圖物件

執行結果:


滑鼠拖動可以從不同角度來觀察函式影象。