十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章將為大家詳細(xì)講解有關(guān)Python如何實現(xiàn)3D繪圖方式,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
我們提供的服務(wù)有:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、哈爾濱ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的哈爾濱網(wǎng)站制作公司
Axes3D 對象創(chuàng)建方法一:Axes3D(fig)
在 Matplotlib 1.0.0 版本中,繪制 3D 圖需要先導(dǎo)入 Axes3D 包,獲取 figure 畫布對象 fig 后,通過 Axes3D(fig) 方法來創(chuàng)建 Axes3D 對象,具體方法如下:
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 獲取 figure 畫布并創(chuàng)建 Axes3D 對象 fig = plt.figure() ax = Axes3D(fig) # 數(shù)據(jù)坐標(biāo) z = np.linspace(0, 15, 1000) x = np.sin(z) y = np.cos(z) # 繪制線性圖 ax.plot(x, y, z) plt.show()
Axes3D 對象創(chuàng)建方法二:add_subplot
在 Matplotlib 3.2.0 版本中,繪制 3D 圖可以通過創(chuàng)建子圖,然后指定 projection 參數(shù) 為 3d 即可,返回的 ax 為 Axes3D 對象,以下兩種方法均可:
import numpy as np import matplotlib.pyplot as plt # 獲取 figure 畫布并通過子圖創(chuàng)建 Axes3D 對象 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 數(shù)據(jù)坐標(biāo) 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 # 通過子圖創(chuàng)建 Axes3D 對象 ax = plt.subplot(111, projection='3d') # 數(shù)據(jù)坐標(biāo) z = np.linspace(0, 15, 1000) x = np.sin(z) y = np.cos(z) # 繪制線性圖 ax.plot(x, y, z) plt.show()
【01x03】Axes3D 對象創(chuàng)建方法三:gca
除了以上兩種方法以外,還可以先獲取畫布對象 fig,再通過 fig.gca() 方法獲取當(dāng)前繪圖區(qū)(gca = Get Current Axes),然后指定 projection 參數(shù) 為 3d 即可,返回的 ax 為 Axes3D 對象。
import numpy as np import matplotlib.pyplot as plt # 依次獲取畫布和繪圖區(qū)并創(chuàng)建 Axes3D 對象 fig = plt.figure() ax = fig.gca(projection='3d') # 數(shù)據(jù)坐標(biāo) z = np.linspace(0, 15, 1000) x = np.sin(z) y = np.cos(z) # 繪制線性圖 ax.plot(x, y, z) plt.show()
以上三種方法運行結(jié)果均為下圖:
cmap 與 colorbar
默認(rèn)情況下,散點圖、線性圖、曲面圖等將以純色著色,但可以通過提供 cmap 參數(shù)支持顏色映射。cmap 參數(shù)用于設(shè)置一些特殊的顏色組合,如漸變色等。
如果使用了 cmap 參數(shù),則可以使用 pyplot.colorbar() 函數(shù)來繪制一個色條,即顏色對照條。
基本語法:matplotlib.pyplot.colorbar([mappable=None, cax=None, ax=None, **kw])
部分參數(shù)解釋如下表,其他參數(shù),如長度,寬度等請參考官方文檔。
參數(shù) | 描述 |
mappable | 要設(shè)置色條的圖像對象,該參數(shù)對于 Figure.colorbar 方法是必需的,但對于 pyplot.colorbar 函數(shù)是可選的 |
cax | 可選項,要繪制色條的軸 |
ax | 可選項,設(shè)置色條的顯示位置,通常在一個畫布上有多個子圖時使用 |
**kw | 可選項,其他關(guān)鍵字參數(shù),參考官方文檔 |
3D 線性圖:Axes3D.plot
基本方法:Axes3D.plot(xs, ys[, zs, zdir='z', *args, **kwargs])
參數(shù) | 描述 |
xs | 一維數(shù)組,點的 x 軸坐標(biāo) |
ys | 一維數(shù)組,點的 y 軸坐標(biāo) |
zs | 一維數(shù)組,可選項,點的 z 軸坐標(biāo) |
zdir | 可選項,在 3D 軸上繪制 2D 數(shù)據(jù)時,數(shù)據(jù)必須以 xs,ys 的形式傳遞 ,若此時將 zdir 設(shè)置為 ‘y’,數(shù)據(jù)將會被繪制到 x-z 軸平面上,默認(rèn)為 ‘z’ |
**kwargs | 其他關(guān)鍵字參數(shù),可選項,可參見 matplotlib.axes.Axes.plot |
import numpy as np import matplotlib.pyplot as plt # 設(shè)置中文顯示 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 依次獲取畫布和繪圖區(qū)并創(chuàng)建 Axes3D 對象 fig = plt.figure() ax = fig.gca(projection='3d') # 第一條3D線性圖數(shù)據(jù) 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線性圖數(shù)據(jù) 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 線性圖二') # 設(shè)置標(biāo)題、軸標(biāo)簽、圖例,也可以直接使用 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])
參數(shù) | 描述 |
xs | 一維數(shù)組,點的 x 軸坐標(biāo) |
ys | 一維數(shù)組,點的 y 軸坐標(biāo) |
zs | 一維數(shù)組,可選項,點的 z 軸坐標(biāo) |
zdir | 可選項,在 3D 軸上繪制 2D 數(shù)據(jù)時,數(shù)據(jù)必須以 xs,ys 的形式傳遞 若此時將 zdir 設(shè)置為 ‘y’,數(shù)據(jù)將會被繪制到 x-z 軸平面上,默認(rèn)為 ‘z’, |
s | 標(biāo)量或數(shù)組類型,可選項,標(biāo)記的大小,默認(rèn) 20 |
c | 標(biāo)記的顏色,可選項,可以是單個顏色或者一個顏色列表 支持英文顏色名稱及其簡寫、十六進(jìn)制顏色碼等,更多顏色示例參見官網(wǎng) Color Demo |
depthshade | bool 值,可選項,默認(rèn) True,是否為散點標(biāo)記著色以提供深度外觀 |
**kwargs | 其他關(guān)鍵字參數(shù),可選項,可參見 scatter |
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 依次獲取畫布和繪圖區(qū)并創(chuàng)建 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 個隨機點,設(shè)置每一組數(shù)據(jù)點的樣式和范圍 x軸數(shù)據(jù)位于[23,32]區(qū)間,y軸數(shù)據(jù)位于[0,100]區(qū)間,z軸數(shù)據(jù)位于[zlow,zhigh]區(qū)間 ''' 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) # 設(shè)置標(biāo)題、軸標(biāo)簽、圖例,也可以直接使用 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])
參數(shù) | 描述 |
X | 二維數(shù)組,x 軸數(shù)據(jù) |
Y | 二維數(shù)組,y 軸數(shù)據(jù) |
Z | 二維數(shù)組,z 軸數(shù)據(jù) |
**kwargs | 其他關(guān)鍵字參數(shù),可選項,如線條樣式顏色等,可參見 Line3DCollection |
import numpy as np import matplotlib.pyplot as plt plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 獲取 figure 畫布并通過子圖創(chuàng)建 Axes3D 對象 fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # 定義Z軸坐標(biāo)的生成方法 def f(m, n): return np.sin(np.sqrt(m ** 2 + n ** 2)) # 設(shè)置3D線框圖數(shù)據(jù) x = np.linspace(-6, 6, 30) y = np.linspace(-6, 6, 30) # 生成網(wǎng)格點坐標(biāo)矩陣,該方法在系列文章八中有具體介紹 X, Y = np.meshgrid(x, y) Z = f(X, Y) # 繪制3D線框圖 ax.plot_wireframe(X, Y, Z, color='c') # 設(shè)置標(biāo)題、軸標(biāo)簽、圖例,也可以直接使用 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()
關(guān)于Python如何實現(xiàn)3D繪圖方式就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。