3D 圖形需要的數據與等高線圖基本相同:X、Y 數據決定坐標點,Z 軸數據決定 X、Y 坐標點對應的高度。與等高線圖使用等高線來代表高度不同,3D 圖形將會以更直觀的形式來表示高度。
為了繪制 3D 圖形,需要調用 Axes3D 對象的 plot_surface() 方法來完成。
下面程序將使用與前面等高線圖相同的數據來繪制 3D 圖形,此時將看到程序會以更直觀的形式來顯示高度。
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D fig = plt.figure(figsize=(12, 8)) ax = Axes3D(fig) delta = 0.125 # 生成代表X軸數據的列表 x = np.arange(-3.0, 3.0, delta) # 生成代表Y軸數據的列表 y = np.arange(-2.0, 2.0, delta) # 對x、y數據執行網格化 X, Y = np.meshgrid(x, y) Z1 = np.exp(-X**2 - Y**2) Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2) # 計算Z軸數據(高度數據) Z = (Z1 - Z2) * 2 # 繪制3D圖形 ax.plot_surface(X, Y, Z, rstride=1, # rstride(row)指定行的跨度 cstride=1, # cstride(column)指定列的跨度 cmap=plt.get_cmap('rainbow')) # 設置顏色映射 # 設置Z軸范圍 ax.set_zlim(-2, 2) # 設置標題 plt.title("3D圖") plt.savefig("d:/test.png") plt.show()
上面程序開始准備了和前一個程序相同的數據,只是該程序將 delta 設置為 0.125,這樣可以避免生成太多的數據點(在繪制 3D 圖形時,計算開銷較大,如果數據點太多, Matplotlib 將會很卡)。
程序中第 20 行代碼調用 Axes3D 對象的 plot_surface() 方法來繪制 3D 圖形,其中 X、Y 參數負責確定坐標點,Z 參數決定 X、Y 坐標點的高度數據。
運行上面程序,可以看到如圖 1 所示的 3D 圖形。