Matplotlib 也可以繪制 3D 圖像,與二維圖像不同的是,繪制三維圖像主要通過 mplot3d 模塊實現。但是,使用 Matplotlib 繪制三維圖像實際上是在二維畫布上展示,所以一般繪制三維圖像時,同樣需要載入 pyplot 模塊。
mplot3d 模塊下主要包含 4 個大類,分別是:
其中,axes3d() 下面主要包含了各種實現繪圖的類和方法。axis3d() 主要是包含了和坐標軸相關的類和方法。art3d() 包含了一些可將 2D 圖像轉換并用于 3D 繪制的類和方法。proj3d() 中包含一些零碎的類和方法,例如計算三維向量長度等。
一般情況下,我們用到最多的就是 mpl_toolkits.mplot3d.axes3d() 中的mpl_toolkits.mplot3d.axes3d.Axes3D() 類,而 Axes3D() 下面又存在繪制不同類型 3D 圖的方法。你可以通過下面的方式導入 Axes3D()。
from mpl_toolkits.mplot3d.axes3d import Axes3D或from mpl_toolkits.mplot3d import Axes3D
三維散點圖
首先,我們導入 numpy 隨機生成一組數據。
import numpy as np# x, y, z 均為 0 到 1 之間的 100 個隨機數x = np.random.normal(0, 1, 100)y = np.random.normal(0, 1, 100)z = np.random.normal(0, 1, 100)
接下來,開始繪圖。第一步是載入 2D, 3D 繪圖模塊。
from mpl_toolkits.mplot3d import Axes3Dimport matplotlib.pyplot as plt
第二步,使用 Axes3D() 創建 3D 圖形對象。
fig = plt.figure()ax = Axes3D(fig)
最后,調用散點圖繪制方法繪圖并顯示出來。
ax.scatter(x, y, z)plt.show()
三維線型圖
線形圖和散點圖相似,需要傳入 x, y, z 三個坐標的數值。詳細的代碼如下。
# 載入模塊from mpl_toolkits.mplot3d import Axes3Dimport matplotlib.pyplot as pltimport numpy as np# 生成數據x = np.linspace(-6 * np.pi, 6 * np.pi, 1000)y = np.sin(x)z = np.cos(x)# 創建 3D 圖形對象fig = plt.figure()ax = Axes3D(fig)# 繪制線型圖ax.plot(x, y, z)# 顯示圖plt.show()
三維柱狀圖
繪制完線型圖,我們繼續嘗試繪制三維柱狀圖,其實它的繪制步驟和上面同樣非常相似。
# 載入模塊from mpl_toolkits.mplot3d import Axes3Dimport matplotlib.pyplot as pltimport numpy as np# 創建 3D 圖形對象fig = plt.figure()ax = Axes3D(fig)# 生成數據并繪圖x = [0, 1, 2, 3, 4, 5, 6]for i in x: y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] z = abs(np.random.normal(1, 10, 10)) ax.bar(y, z, i, zdir='y', color=['r', 'g', 'b', 'y'])plt.show()
三維圖曲面圖
接下來需要繪制的三維曲面圖要麻煩一些,我們需要對數據進行矩陣處理。其實和畫二維等高線圖很相似,只是多增加了一個維度。
新聞熱點
疑難解答