如何在 Matplotlib 中建立曲面圖

Suraj Joshi 2020年6月25日
如何在 Matplotlib 中建立曲面圖

在 Matplotlib 中,我們使用 mplot3d 工具包進行 3-D 分析和視覺化,其中包含基於 Matplotlib 的 2-D 函式構建的 3-D 繪圖方法。我們可以通過將 projection='3d'引數傳遞給 Matplotlib 中任何軸的建立函式來建立 3-D 軸。初始化 3-D 軸後,我們可以使用 plot_surface() 方法生成曲面圖。

Axes3D.plot_surface() 方法

我們可以使用 Axes3D.plot_surface(X, Y, Z, *args, **kwargs) 方法建立表面圖其中 X,Y 和 Z 均為二維陣列。

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

fig = plt.figure(figsize=(8, 6))
ax3d = plt.axes(projection="3d")

xdata = np.linspace(-3, 3, 100)
ydata = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(xdata, ydata)
Z = 1 / (1 + np.exp(-X - Y))

ax3d = plt.axes(projection="3d")
ax3d.plot_surface(X, Y, Z, cmap="plasma")
ax3d.set_title("Surface Plot in Matplotlib")
ax3d.set_xlabel("X")
ax3d.set_ylabel("Y")
ax3d.set_zlabel("Z")

plt.show()

使用 plot_surface 在 matplotlib 中繪製曲面圖

這樣,Matplotlib 會在 3D 空間中生成曲面圖。這裡的 cmap 引數用於在 3D 色彩空間中很好地表示我們的資料。圖的顏色隨因變數值的變化而變化。

我們可以根據以下引數自定義圖:

  • rstride:行步長,預設值為 10
  • cstride:列步長,預設值為 10
  • color:表面的顏色
  • cmap:表面的顏色圖
  • facecolors:表面中每個補丁的面部顏色
  • norm:Normalize 的一個例項,用於將值對映到顏色
  • vmin:要對映的最小值
  • vmax:要對映的最大值
  • shade:是否遮罩臉部顏色
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits import mplot3d

fig = plt.figure(figsize=(8, 6))
ax3d = plt.axes(projection="3d")

xdata = np.linspace(-3, 3, 100)
ydata = np.linspace(-3, 3, 100)
X, Y = np.meshgrid(xdata, ydata)
Z = 1 / (1 + np.exp(-X - Y))

ax3d = plt.axes(projection="3d")
surf = ax3d.plot_surface(X, Y, Z, rstride=7, cstride=7, cmap="viridis")
fig.colorbar(surf, ax=ax3d)
ax3d.set_title("Surface Plot in Matplotlib")
ax3d.set_xlabel("X")
ax3d.set_ylabel("Y")
ax3d.set_zlabel("Z")

plt.savefig("Customized Surface Plot.png")

plt.show()

定製曲面圖

在這個例子中,我們通過使用 colorbar() 方法在圖形中新增一個顏色條,並將表面繪圖物件傳遞給該方法,這使圖形更具資訊性。

作者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn