如何用Matplotlib 畫三維圖的示例程式碼
阿新 • • 發佈:2020-07-28
用Matplotlib畫三維圖
最基本的三維圖是由(x,y,z)三維座標點構成的線圖與散點圖,可以用ax.plot3D和ax.scatter3D函式來建立,預設情況下,散點會自動改變透明度,以在平面上呈現出立體感
三維的線圖和散點圖
#繪製三角螺旋線 from mpl_toolkits import mplot3d %matplotlib inline import matplotlib.pyplot as plt import numpy as np ax = plt.axes(projection='3d') #三維線的資料 zline = np.linspace(0,15,1000) xline = np.sin(zline) yline = np.cos(zline) ax.plot3D(xline,yline,zline,'gray') # 三維散點的資料 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')
三維等高線圖
def f(x,y): return np.sin(np.sqrt(x ** 2 + y ** 2)) x = np.linspace(-6,6,30) y = np.linspace(-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') #調整觀察角度和方位角。這裡將俯仰角設為60度,把方位角調整為35度 ax.view_init(60,35)
線框圖和全面圖
全面圖和線框圖相似,只不過線框圖的每一個面都是由多邊形構成。只要增加唉一個配色方案來填充這些多邊形,就可以感受到視覺化圖形表面的拓撲結構了。
#線框圖 fig =plt.figure() ax = plt.axes(projection='3d') ax.plot_wireframe(X,color='c') ax.set_title('wireframe')
#曲面圖 ax = plt.axes(projection='3d') ax.plot_surface(X,rstride=1,cstride=1,cmap='viridis',edgecolor='none') ax.set_title('surface')
#使用極座標可以獲得切片的效果 r = np.linspace(0,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,edgecolor='none')
曲面三角剖分
在某些應用場景下,上述這些要求均勻取樣的網格資料顯得太過嚴格且不太容易實現。這時就可以使用三角剖分部分圖形。
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,z,c=z,linewidth=0.5)
#上圖還有許多地方需要修補,這些工作可以由ax.plot_trisurf函式幫助我們完成。它首先找到一組所有點都連線起來的三角形,然後用這些三角形建立曲面 ax = plt.axes(projection='3d') ax.plot_trisurf(x,edgecolor='none')
莫比烏斯帶(應用曲面三角剖分)
#繪製莫比烏斯帶 #由於它是一條二維帶,因此需要兩個內在維度。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平面內的半徑 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)) #要畫出莫比烏斯帶,還必須保證三角部分是正確的。最好的方法是首先用基本引數化方法定義三角部分,然後用Matplotlib將 #這個三角剖分對映到莫比烏斯帶的三維空間裡 from matplotlib.tri import Triangulation tri = Triangulation(np.ravel(w),np.ravel(theta)) ax = plt.axes(projection='3d') ax.plot_trisurf(x,triangles=tri.triangles,linewidth=0.2) ax.set_xlim(-1,1);ax.set_ylim(-1,1);ax.set_zlim(-1,1)
到此這篇關於如何用Matplotlib 畫三維圖的示例程式碼的文章就介紹到這了,更多相關Matplotlib 三維圖內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!