Matplotlib - 3D 線框圖



3D 線框圖是一種使用線條在三維空間中表示資料的方法,用來表示物體的形狀。線框圖連線物體的各個資料點,建立網格狀結構來顯示物體的形狀。

想象一下我們有一個立方體,而不是繪製立方體的實心面,我們只顯示描繪其邊緣和角點的線條。我們得到的輪廓就是 3D 線框圖 -

3D Wireframe Plots

Matplotlib 中的 3D 線框圖

在 Matplotlib 中,3D 線框圖是一種視覺化型別,其中資料由形成三維表面邊緣的線網路表示。

我們可以使用 'mpl_toolkits.mplot3d' 模組中的 plot_wireframe() 函式在 Matplotlib 中建立 3D 線框圖。此函式接受 3D 物件的 X、Y 和 Z 座標,並用線連線這些座標,以建立物件的 3D 輪廓。

讓我們從繪製一個基本的 3D 線框圖開始。

基本的 3D 線框圖

Matplotlib 中的基本 3D 線框圖將 3D 物件的表面顯示為線網格,使您可以視覺化表面的形狀和結構。線框圖是透過連線球體表面的一系列點形成的,這些點之間有沿 x、y 和 z 軸延伸的直線。

要建立線框圖,您可以為要視覺化的表面點的 x、y 和 z 座標定義陣列。然後,您可以將這些陣列傳遞給 plot_wireframe() 函式以生成線框圖。

示例

在以下示例中,我們正在建立一個球形表面的基本 3D 線框圖。首先,我們透過使用角度“theta”和“phi”改變 X、Y 和 Z 點來生成球體。然後,我們使用 plot_wireframe() 函式建立連線球體資料點的線。在生成的圖中,我們得到一個球形表面的 3D 線框圖 -

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Generating data for a spherical surface
theta = np.linspace(0, 2*np.pi, 100)
phi = np.linspace(0, np.pi, 100)
theta, phi = np.meshgrid(theta, phi)
r = 1
x = r * np.sin(phi) * np.cos(theta)
y = r * np.sin(phi) * np.sin(theta)
z = r * np.cos(phi)

# Creating a 3D plot
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Plotting the spherical wireframe
ax.plot_wireframe(x, y, z, color='blue')

# Adding labels and title
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Basic 3D Wireframe Plot')

# Displaying the plot
plt.show()
輸出

以下是上述程式碼的輸出 -

Basic 3D Wireframe Plot

環形 3D 線框圖

在 Matplotlib 中,環形 3D 線框圖使用三維空間中的線表示環面的表面。環面是一箇中間有孔的甜甜圈狀物體。線框圖連線環面表面的線以建立其輪廓。

示例

在這裡,我們正在生成一個環形 3D 線框圖。我們首先透過使用角度“theta”和“phi”以及主半徑“R”和次半徑“r”改變 X 和 Y 座標來建立環面的表面,而 Z 座標則隨“r”和“phi”變化。然後,我們使用 plot_wireframe() 函式用線連線座標,建立生成的圖,該圖表示環面的 3D 線框圖 -

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Generating data for a toroidal surface
theta = np.linspace(0, 2*np.pi, 100)
phi = np.linspace(0, 2*np.pi, 100)
theta, phi = np.meshgrid(theta, phi)
R = 2
r = 1
x = (R + r * np.cos(phi)) * np.cos(theta)
y = (R + r * np.cos(phi)) * np.sin(theta)
z = r * np.sin(phi)

# Creating a 3D plot
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Plotting the toroidal wireframe
ax.plot_wireframe(x, y, z, color='green')

# Adding labels and title
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Toroidal 3D Wireframe Plot')

# Displaying the plot
plt.show()
輸出

執行上述程式碼後,我們將獲得以下輸出 -

Toroidal 3D Wireframe Plot

拋物面 3D 線框圖

Matplotlib 中的拋物面 3D 線框圖使用三維圖形上的線顯示拋物面的輪廓。拋物面是一個三維拋物線,類似於碗。3D 線框圖連線資料點以建立拋物面的網格狀結構。

示例

以下示例在 3D 空間中建立拋物面的 3D 線框圖。我們透過在 3D 圖表上均勻間隔 X、Y 和 Z 來建立拋物面。然後,我們使用 plot_wireframe() 函式用線連線座標以建立 3D 線框圖 -

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Generating data for a paraboloid surface
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = X**2 + Y**2

# Creating a 3D plot
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Plotting the paraboloid wireframe
ax.plot_wireframe(X, Y, Z, color='purple')

# Adding labels and title
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Paraboloid 3D Wireframe Plot')

# Displaying the plot
plt.show()
輸出

執行上述程式碼後,我們將獲得以下輸出 -

Paraboloid 3D Wireframe Plot

圓柱體 3D 線框圖

在 Matplotlib 中,圓柱體線框圖是在三維空間中視覺化圓柱體幾何形狀的一種方式。圓柱體是一種三維形狀,其橫截面為圓形,沿其長度延伸。圓柱體表面上的資料點用線連線起來以建立 3D 線框圖。

示例

現在,我們正在 3D 圖表上為圓柱體生成 3D 線框圖。我們首先繪製表示圓柱體表面的 X 和 Y 座標,透過使用半徑“r”和角度“theta”(theta 範圍為 0 到 2π 以覆蓋整個圓形)改變它們。然後,我們繪製表示圓柱體高度的 Z 座標。之後,我們使用 plot_wireframe() 函式用直線連線座標。這將建立一個生成的圖,該圖顯示圓柱體的 3D 線框圖 -

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Defining the parameters
r = 1
h = 2
theta = np.linspace(0, 2*np.pi, 100)
z = np.linspace(0, h, 10)

# Generating cylinder coordinates
theta_3d, z_3d = np.meshgrid(theta, z)
x = r * np.cos(theta_3d)
y = r * np.sin(theta_3d)

# Creating a 3D plot
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Plotting the cylindrical wireframe
ax.plot_wireframe(x, y, z_3d, color='orange')

# Adding labels and title
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Cylindrical 3D Wireframe Plot')

# Displaying the plot
plt.show()
輸出

執行上述程式碼後,我們將獲得以下輸出 -

Cylindrical 3D Wireframe Plot
廣告