您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Python如何實現3D繪圖方式,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
Axes3D 對象創建方法一:Axes3D(fig)
在 Matplotlib 1.0.0 版本中,繪制 3D 圖需要先導入 Axes3D 包,獲取 figure 畫布對象 fig 后,通過 Axes3D(fig) 方法來創建 Axes3D 對象,具體方法如下:
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 獲取 figure 畫布并創建 Axes3D 對象 fig = plt.figure() ax = Axes3D(fig) # 數據坐標 z = np.linspace(0, 15, 1000) x = np.sin(z) y = np.cos(z) # 繪制線性圖 ax.plot(x, y, z) plt.show()
Axes3D 對象創建方法二:add_subplot
在 Matplotlib 3.2.0 版本中,繪制 3D 圖可以通過創建子圖,然后指定 projection 參數 為 3d 即可,返回的 ax 為 Axes3D 對象,以下兩種方法均可:
import numpy as np import matplotlib.pyplot as plt # 獲取 figure 畫布并通過子圖創建 Axes3D 對象 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 數據坐標 z = np.linspace(0, 15, 1000) x = np.sin(z) y = np.cos(z) # 繪制線性圖 ax.plot(x, y, z) plt.show()
import numpy as np import matplotlib.pyplot as plt # 通過子圖創建 Axes3D 對象 ax = plt.subplot(111, projection='3d') # 數據坐標 z = np.linspace(0, 15, 1000) x = np.sin(z) y = np.cos(z) # 繪制線性圖 ax.plot(x, y, z) plt.show()
【01x03】Axes3D 對象創建方法三:gca
除了以上兩種方法以外,還可以先獲取畫布對象 fig,再通過 fig.gca() 方法獲取當前繪圖區(gca = Get Current Axes),然后指定 projection 參數 為 3d 即可,返回的 ax 為 Axes3D 對象。
import numpy as np import matplotlib.pyplot as plt # 依次獲取畫布和繪圖區并創建 Axes3D 對象 fig = plt.figure() ax = fig.gca(projection='3d') # 數據坐標 z = np.linspace(0, 15, 1000) x = np.sin(z) y = np.cos(z) # 繪制線性圖 ax.plot(x, y, z) plt.show()
以上三種方法運行結果均為下圖:
cmap 與 colorbar
默認情況下,散點圖、線性圖、曲面圖等將以純色著色,但可以通過提供 cmap 參數支持顏色映射。cmap 參數用于設置一些特殊的顏色組合,如漸變色等。
如果使用了 cmap 參數,則可以使用 pyplot.colorbar() 函數來繪制一個色條,即顏色對照條。
基本語法:matplotlib.pyplot.colorbar([mappable=None, cax=None, ax=None, **kw])
部分參數解釋如下表,其他參數,如長度,寬度等請參考官方文檔。
參數 | 描述 |
mappable | 要設置色條的圖像對象,該參數對于 Figure.colorbar 方法是必需的,但對于 pyplot.colorbar 函數是可選的 |
cax | 可選項,要繪制色條的軸 |
ax | 可選項,設置色條的顯示位置,通常在一個畫布上有多個子圖時使用 |
**kw | 可選項,其他關鍵字參數,參考官方文檔 |
3D 線性圖:Axes3D.plot
基本方法:Axes3D.plot(xs, ys[, zs, zdir='z', *args, **kwargs])
參數 | 描述 |
xs | 一維數組,點的 x 軸坐標 |
ys | 一維數組,點的 y 軸坐標 |
zs | 一維數組,可選項,點的 z 軸坐標 |
zdir | 可選項,在 3D 軸上繪制 2D 數據時,數據必須以 xs,ys 的形式傳遞 ,若此時將 zdir 設置為 ‘y’,數據將會被繪制到 x-z 軸平面上,默認為 ‘z’ |
**kwargs | 其他關鍵字參數,可選項,可參見 matplotlib.axes.Axes.plot |
import numpy as np import matplotlib.pyplot as plt # 設置中文顯示 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 依次獲取畫布和繪圖區并創建 Axes3D 對象 fig = plt.figure() ax = fig.gca(projection='3d') # 第一條3D線性圖數據 theta = np.linspace(-4 * np.pi, 4 * np.pi, 100) z1 = np.linspace(-2, 2, 100) r = z1**2 + 1 x1 = r * np.sin(theta) y1 = r * np.cos(theta) # 第二條3D線性圖數據 z2 = np.linspace(-3, 3, 100) x2 = np.sin(z2) y2 = np.cos(z2) # 繪制3D線性圖 ax.plot(x1, y1, z1, color='b', label='3D 線性圖一') ax.plot(x2, y2, z2, color='r', label='3D 線性圖二') # 設置標題、軸標簽、圖例,也可以直接使用 plt.title、plt.xlabel、plt.legend... ax.set_title('繪制 3D 線性圖示例', pad=15, fontsize='12') ax.set_xlabel('x 軸', color='r', fontsize='12') ax.set_ylabel('y 軸', color='g', fontsize='12') ax.set_zlabel('z 軸', color='b', fontsize='12') ax.legend() plt.show()
3D 散點圖:Axes3D.scatter
基本方法:Axes3D.scatter(xs, ys[, zs=0, zdir='z', s=20, c=None, depthshade=True, *args, **kwargs])
參數 | 描述 |
xs | 一維數組,點的 x 軸坐標 |
ys | 一維數組,點的 y 軸坐標 |
zs | 一維數組,可選項,點的 z 軸坐標 |
zdir | 可選項,在 3D 軸上繪制 2D 數據時,數據必須以 xs,ys 的形式傳遞 若此時將 zdir 設置為 ‘y’,數據將會被繪制到 x-z 軸平面上,默認為 ‘z’, |
s | 標量或數組類型,可選項,標記的大小,默認 20 |
c | 標記的顏色,可選項,可以是單個顏色或者一個顏色列表 支持英文顏色名稱及其簡寫、十六進制顏色碼等,更多顏色示例參見官網 Color Demo |
depthshade | bool 值,可選項,默認 True,是否為散點標記著色以提供深度外觀 |
**kwargs | 其他關鍵字參數,可選項,可參見 scatter |
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 依次獲取畫布和繪圖區并創建 Axes3D 對象 fig = plt.figure() ax = fig.gca(projection='3d') n = 100 def randrange(n, vmin, vmax): return (vmax - vmin)*np.random.rand(n) + vmin ''' 定義繪制 n 個隨機點,設置每一組數據點的樣式和范圍 x軸數據位于[23,32]區間,y軸數據位于[0,100]區間,z軸數據位于[zlow,zhigh]區間 ''' for m, zlow, zhigh in [('o', -50, -25), ('^', -30, -5)]: xs = randrange(n, 23, 32) ys = randrange(n, 0, 100) zs = randrange(n, zlow, zhigh) ax.scatter(xs, ys, zs, marker=m) # 設置標題、軸標簽、圖例,也可以直接使用 plt.title、plt.xlabel... ax.set_title('繪制 3D 散點圖示例', pad=15, fontsize='12') ax.set_xlabel('x 軸', color='b') ax.set_ylabel('y 軸', color='b') ax.set_zlabel('z 軸', color='b') plt.show()
3D 線框圖:Axes3D.plot_wireframe
基本方法:Axes3D.plot_wireframe(X, Y, Z[, *args, **kwargs])
參數 | 描述 |
X | 二維數組,x 軸數據 |
Y | 二維數組,y 軸數據 |
Z | 二維數組,z 軸數據 |
**kwargs | 其他關鍵字參數,可選項,如線條樣式顏色等,可參見 Line3DCollection |
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 獲取 figure 畫布并通過子圖創建 Axes3D 對象 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 定義Z軸坐標的生成方法 def f(m, n): return np.sin(np.sqrt(m ** 2 + n ** 2)) # 設置3D線框圖數據 x = np.linspace(-6, 6, 30) y = np.linspace(-6, 6, 30) # 生成網格點坐標矩陣,該方法在系列文章八中有具體介紹 X, Y = np.meshgrid(x, y) Z = f(X, Y) # 繪制3D線框圖 ax.plot_wireframe(X, Y, Z, color='c') # 設置標題、軸標簽、圖例,也可以直接使用 plt.title、plt.xlabel... ax.set_title('繪制 3D 線框圖示例', pad=15, fontsize='12') ax.set_xlabel('x 軸') ax.set_ylabel('y 軸') ax.set_zlabel('z 軸') plt.show()
關于Python如何實現3D繪圖方式就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。