python做三維圖的方法

這篇文章主要介紹python做三維圖的方法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)公司公司2013年成立,先為華容等服務(wù)建站,華容等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為華容企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

Python三維繪圖

在遇到三維數(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')  #這種方法也可以畫(huà)多個(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)軸上畫(huà)圖:

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

python做三維圖的方法

3、三維曲面

下一步畫(huà)三維曲面:

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

python做三維圖的方法

如果加入渲染時(shí)的步長(zhǎng),會(huì)得到更加清晰細(xì)膩的圖像:

ax3.plot_surface(X,Y,Z,rstride = 1, cstride = 1,cmap='rainbow'),其中的row和cloum_stride為橫豎方向的繪圖采樣步長(zhǎng),越小繪圖越精細(xì)。

python做三維圖的方法

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

python做三維圖的方法

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

python做三維圖的方法

以上是python做三維圖的方法的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

標(biāo)題名稱:python做三維圖的方法
URL標(biāo)題:http://bm7419.com/article16/pcgpgg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、虛擬主機(jī)、企業(yè)建站服務(wù)器托管、域名注冊(cè)、網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)