Python三維繪圖之Matplotlib庫(kù)的使用方法
前言
在遇到三維數(shù)據(jù)時(shí),三維圖像能給我們對(duì)數(shù)據(jù)帶來(lái)更加深入地理解。python的matplotlib庫(kù)就包含了豐富的三維繪圖工具。
1.創(chuàng)建三維坐標(biāo)軸對(duì)象Axes3D
創(chuàng)建Axes3D主要有兩種方式,一種是利用關(guān)鍵字projection='3d'
l來(lái)實(shí)現(xiàn),另一種則是通過(guò)從mpl_toolkits.mplot3d
導(dǎo)入對(duì)象Axes3D來(lái)實(shí)現(xiàn),目的都是生成具有三維格式的對(duì)象Axes3D.
#方法一,利用關(guān)鍵字 from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D #定義坐標(biāo)軸 fig = plt.figure() ax1 = plt.axes(projection='3d') #ax = fig.add_subplot(111,projection='3d') #這種方法也可以畫多個(gè)子圖 #方法二,利用三維軸方法 from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D #定義圖像和三維格式坐標(biāo)軸 fig=plt.figure() ax2 = Axes3D(fig)
2.三維曲線和散點(diǎn)
隨后在定義的坐標(biāo)軸上畫圖:
import numpy as np z = np.linspace(0,13,1000) x = 5*np.sin(z) y = 5*np.cos(z) zd = 13*np.random.random(100) xd = 5*np.sin(zd) yd = 5*np.cos(zd) ax1.scatter3D(xd,yd,zd, cmap='Blues') #繪制散點(diǎn)圖 ax1.plot3D(x,y,z,'gray') #繪制空間曲線 plt.show()
3.三維曲面
下一步畫三維曲面:
fig = plt.figure() #定義新的三維坐標(biāo)軸 ax3 = plt.axes(projection='3d') #定義三維數(shù)據(jù) xx = np.arange(-5,5,0.5) yy = np.arange(-5,5,0.5) X, Y = np.meshgrid(xx, yy) Z = np.sin(X)+np.cos(Y) #作圖 ax3.plot_surface(X,Y,Z,cmap='rainbow') #ax3.contour(X,Y,Z, zdim='z',offset=-2,cmap='rainbow) #等高線圖,要設(shè)置offset,為Z的最小值 plt.show()
如果加入渲染時(shí)的步長(zhǎng),會(huì)得到更加清晰細(xì)膩的圖像:
ax3.plot_surface(X,Y,Z,rstride = 1, cstride = 1,cmap='rainbow')
,其中的row和cloum_stride為橫豎方向的繪圖采樣步長(zhǎng),越小繪圖越精細(xì)。
4.等高線
同時(shí)還可以將等高線投影到不同的面上:
from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D #定義坐標(biāo)軸 fig4 = plt.figure() ax4 = plt.axes(projection='3d') #生成三維數(shù)據(jù) xx = np.arange(-5,5,0.1) yy = np.arange(-5,5,0.1) X, Y = np.meshgrid(xx, yy) Z = np.sin(np.sqrt(X**2+Y**2)) #作圖 ax4.plot_surface(X,Y,Z,alpha=0.3,cmap='winter') #生成表面, alpha 用于控制透明度 ax4.contour(X,Y,Z,zdir='z', offset=-3,cmap="rainbow") #生成z方向投影,投到x-y平面 ax4.contour(X,Y,Z,zdir='x', offset=-6,cmap="rainbow") #生成x方向投影,投到y(tǒng)-z平面 ax4.contour(X,Y,Z,zdir='y', offset=6,cmap="rainbow") #生成y方向投影,投到x-z平面 #ax4.contourf(X,Y,Z,zdir='y', offset=6,cmap="rainbow") #生成y方向投影填充,投到x-z平面,contourf()函數(shù) #設(shè)定顯示范圍 ax4.set_xlabel('X') ax4.set_xlim(-6, 4) #拉開(kāi)坐標(biāo)軸范圍顯示投影 ax4.set_ylabel('Y') ax4.set_ylim(-4, 6) ax4.set_zlabel('Z') ax4.set_zlim(-3, 3) plt.show()
5.隨機(jī)散點(diǎn)圖
可以利用scatter()生成各種不同大小,顏色的散點(diǎn)圖,其參數(shù)如下:
#函數(shù)定義 matplotlib.pyplot.scatter(x, y, s=None, #散點(diǎn)的大小 array scalar c=None, #顏色序列 array、sequency marker=None, #點(diǎn)的樣式 cmap=None, #colormap 顏色樣式 norm=None, #歸一化 歸一化的顏色camp vmin=None, vmax=None, #對(duì)應(yīng)上面的歸一化范圍 alpha=None, #透明度 linewidths=None, #線寬 verts=None, # edgecolors=None, #邊緣顏色 data=None, **kwargs ) #ref:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.scatter.html
from matplotlib import pyplot as plt from mpl_toolkits.mplot3d import Axes3D #定義坐標(biāo)軸 fig4 = plt.figure() ax4 = plt.axes(projection='3d') #生成三維數(shù)據(jù) xx = np.random.random(20)*10-5 #取100個(gè)隨機(jī)數(shù),范圍在5~5之間 yy = np.random.random(20)*10-5 X, Y = np.meshgrid(xx, yy) Z = np.sin(np.sqrt(X**2+Y**2)) #作圖 ax4.scatter(X,Y,Z,alpha=0.3,c=np.random.random(400),s=np.random.randint(10,20, size=(20, 40))) #生成散點(diǎn).利用c控制顏色序列,s控制大小 #設(shè)定顯示范圍 plt.show()
Finish
總結(jié)
到此這篇關(guān)于Python三維繪圖之Matplotlib庫(kù)使用的文章就介紹到這了,更多相關(guān)Python三維繪圖Matplotlib庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Jupyter notebook 遠(yuǎn)程配置及SSL加密教程
這篇文章主要介紹了Jupyter notebook 遠(yuǎn)程配置及SSL加密教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04淺談python3 構(gòu)造函數(shù)和析構(gòu)函數(shù)
這篇文章主要介紹了淺談python3 構(gòu)造函數(shù)和析構(gòu)函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03詳解Python調(diào)用系統(tǒng)命令的六種方法
這篇文章主要介紹了詳解Python調(diào)用系統(tǒng)命令的六種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01讓代碼變得更易維護(hù)的7個(gè)Python庫(kù)
今天小編就為大家分享一篇關(guān)于讓代碼變得更易維護(hù)的7個(gè)Python庫(kù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-10-10