python画三维立体图完整代码_如何用Matplotlib 画三维图的示例代码
最基本的三維圖是由(x, y, z)三維坐標(biāo)點(diǎn)構(gòu)成的線圖與散點(diǎn)圖,可以用ax.plot3D和ax.scatter3D函數(shù)來創(chuàng)建,默認(rèn)情況下,散點(diǎn)會(huì)自動(dòng)改變透明度,以在平面上呈現(xiàn)出立體感
三維的線圖和散點(diǎn)圖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#繪制三角螺旋線
from mpl_toolkitsimport mplot3d
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
ax= plt.axes(projection='3d')
#三維線的數(shù)據(jù)
zline= np.linspace(0,15,1000)
xline= np.sin(zline)
yline= np.cos(zline)
ax.plot3D(xline, yline, zline,'gray')
# 三維散點(diǎn)的數(shù)據(jù)
zdata= 15 * np.random.random(100)
xdata= np.sin(zdata)+ 0.1 * np.random.randn(100)
ydata= np.cos(zdata)+ 0.1 * np.random.randn(100)
ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap='Greens')
三維等高線圖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def f(x, y):
return np.sin(np.sqrt(x** 2 + y** 2))
x= np.linspace(-6,6,30)
y= np.linspace(-6,6,30)
X, Y= np.meshgrid(x, y)
Z= f(X,Y)
fig= plt.figure()
ax= plt.axes(projection='3d')
ax.contour3D(X, Y, Z,50, cmap='binary')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
#調(diào)整觀察角度和方位角。這里將俯仰角設(shè)為60度,把方位角調(diào)整為35度
ax.view_init(60,35)
線框圖和全面圖
全面圖和線框圖相似,只不過線框圖的每一個(gè)面都是由多邊形構(gòu)成。只要增加唉一個(gè)配色方案來填充這些多邊形,就可以感受到可視化圖形表面的拓?fù)浣Y(jié)構(gòu)了。
1
2
3
4
5
#線框圖
fig=plt.figure()
ax= plt.axes(projection='3d')
ax.plot_wireframe(X, Y, Z, color='c')
ax.set_title('wireframe')
1
2
3
4
#曲面圖
ax= plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis', edgecolor='none')
ax.set_title('surface')
1
2
3
4
5
6
7
8
9
#使用極坐標(biāo)可以獲得切片的效果
r= np.linspace(0,6,20)
theta= np.linspace(-0.9 * np.pi,0.8 * np.pi,40)
r, theta= np.meshgrid(r, theta)
X= r* np.sin(theta)
Y= r* np.cos(theta)
Z= f(X, Y)
ax= plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='viridis', edgecolor='none')
曲面三角剖分
在某些應(yīng)用場(chǎng)景下,上述這些要求均勻采樣的網(wǎng)格數(shù)據(jù)顯得太過嚴(yán)格且不太容易實(shí)現(xiàn)。這時(shí)就可以使用三角剖分部分圖形。
1
2
3
4
5
6
7
8
theta= 2 * np.pi* np.random.random(1000)
r= 6 * np.random.random(1000)
x= np.ravel(r* np.sin(theta))
y= np.ravel(r* np.cos(theta))
z= f(x, y)
ax= plt.axes(projection='3d')
ax.scatter(x, y, z, c=z, cmap='viridis', linewidth=0.5)
1
2
3
#上圖還有許多地方需要修補(bǔ),這些工作可以由ax.plot_trisurf函數(shù)幫助我們完成。它首先找到一組所有點(diǎn)都連接起來的三角形,然后用這些三角形創(chuàng)建曲面
ax= plt.axes(projection='3d')
ax.plot_trisurf(x, y, z, cmap='viridis', edgecolor='none')
莫比烏斯帶(應(yīng)用曲面三角剖分)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#繪制莫比烏斯帶
#由于它是一條二維帶,因此需要兩個(gè)內(nèi)在維度。theta維度取值范圍是0~2pi,寬度維度w取值范圍是-1~1
theta= np.linspace(0,2 * np.pi,30)
w= np.linspace(-0.25,0.25,8)
w, theta= np.meshgrid(w, theta)
phi= 0.5 * theta
#x-y平面內(nèi)的半徑
r= 1 + w* np.cos(phi)
x= np.ravel(r* np.cos(theta))
y= np.ravel(r* np.sin(theta))
z= np.ravel(w* np.sin(phi))
#要畫出莫比烏斯帶,還必須保證三角部分是正確的。最好的方法是首先用基本參數(shù)化方法定義三角部分,然后用Matplotlib將
#這個(gè)三角剖分映射到莫比烏斯帶的三維空間里
from matplotlib.triimport Triangulation
tri= Triangulation(np.ravel(w), np.ravel(theta))
ax= plt.axes(projection='3d')
ax.plot_trisurf(x, y, z, triangles=tri.triangles, cmap='viridis', linewidth=0.2)
ax.set_xlim(-1,1);ax.set_ylim(-1,1);ax.set_zlim(-1,1)
到此這篇關(guān)于如何用Matplotlib 畫三維圖的示例代碼的文章就介紹到這了,更多相關(guān)Matplotlib 三維圖內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://blog.csdn.net/jasonzhoujx/article/details/81780774
總結(jié)
以上是生活随笔為你收集整理的python画三维立体图完整代码_如何用Matplotlib 画三维图的示例代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习K-均值——nonzero(cl
- 下一篇: 【python数据分析】pandas数据