python绘图3d_超好看的3D绘图方式,Python厉害了!
【01x01】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()
【01x02】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()
以上三種方法運行結果均為下圖:
【02x00】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可選項,其他關鍵字參數,參考官方文檔
【03x00】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.plotimport?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()
【04x00】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
depthshadebool 值,可選項,默認 True,是否為散點標記著色以提供深度外觀
**kwargs其他關鍵字參數,可選項,可參見 scatterimport?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()
【05x00】3D 線框圖:Axes3D.plot_wireframe
基本方法:Axes3D.plot_wireframe(X, Y, Z[, *args, **kwargs])參數描述
X二維數組,x 軸數據
Y二維數組,y 軸數據
Z二維數組,z 軸數據
**kwargs其他關鍵字參數,可選項,如線條樣式顏色等,可參見Line3DCollectionimport?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_超好看的3D绘图方式,Python厉害了!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mencoder_有用的Mplayer
- 下一篇: word设置多级列表