python 三维数据绘制等值高线剖面图_Matplotlib中的三维绘图
Matplotlib最初設計時只考慮了二維繪圖。在1.0版本發布時,一些三維繪圖實用程序構建在Matplotlib的二維顯示之上,結果是一組方便(如果有限)的三維數據可視化工具。通過導入mplot3d主Matplotlib安裝中包含的工具包來啟用三維圖:
from mpl_toolkits import mplot3d
導入此子模塊后,可以通過將關鍵字傳遞projection='3d'給任何法線軸創建例程來創建三維軸:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = plt.axes(projection='3d')
啟用此三維軸后,我們現在可以繪制各種三維繪圖類型。三維繪圖是通過交互式觀看數字而非靜態地在筆記本中觀看數字而獲益的功能之一;回想一下,要使用交互式數字,您可以使用%matplotlib notebook而不是%matplotlib inline在運行此代碼時使用。
三維點和線
最基本的三維圖是根據(x,y,z)三元組創建的散點圖的線或集合。與前面討論的更常見的二維圖類比,可以使用ax.plot3D和ax.scatter3D函數創建這些圖。這些的調用簽名幾乎與其二維對應的簽名相同,因此您可以參考
ax = plt.axes(projection='3d')
# Data for a three-dimensional line
zline = np.linspace(0, 15, 1000)
xline = np.sin(zline)
yline = np.cos(zline)
ax.plot3D(xline, yline, zline, 'gray')
# Data for three-dimensional scattered points
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');
請注意,默認情況下,散點會調整其透明度,以便在頁面上給出深度感。雖然在靜態圖像中有時難以看到三維效果,但是交互式視圖可以導致關于點的布局的一些很好的直覺。
三維輪廓圖
類似于我們在mplot3d包含使用相同輸入創建三維浮雕圖的工具。與二維ax.contour圖一樣,ax.contour3D要求所有輸入數據都采用二維規則網格的形式,并在每個點評估Z數據。這里我們將展示一個三維正弦函數的三維等高線圖:
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');
有時默認的視角不是最佳的,在這種情況下我們可以使用該view_init方法來設置高程和方位角。在下面的示例中,我們將使用60度的高程(即xy平面上方60度)和35度的方位角(即繞z軸逆時針旋轉35度):
ax.view_init(60, 35)
fig
再次注意,當使用Matplotlib的交互式后端之一時,通過單擊和拖動可以交互式地完成這種類型的旋轉。
表面三角測量
對于某些應用,上述例程所需的均勻采樣網格過于嚴格且不方便。在這些情況下,基于三角測量的圖可能非常有用。如果不是從笛卡爾坐標或極坐標網格中得到平均值,我們會有一組隨機抽取?
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_wireframe(X, Y, Z, color='black')
ax.set_title('wireframe');
我們可以創建點的散點圖,以了解我們從中采樣的表面:
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
cmap='viridis', edgecolor='none')
ax.set_title('surface');
這留下了許多不足之處。在這種情況下幫助我們的功能是ax.plot_trisurf,通過首先找到在相鄰點之間形成的一組三角形來創建表面(請記住,x,y和z這里是一維數組):
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');
結果當然不像用網格繪制時那樣干凈,但這種三角測量的靈活性允許一些非常有趣的三維圖。
總結
以上是生活随笔為你收集整理的python 三维数据绘制等值高线剖面图_Matplotlib中的三维绘图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab 海面反射,海面波浪模拟 M
- 下一篇: PIC汇编