python中15種3D繪圖函數(shù)總結(jié)
基礎(chǔ)圖
一般來(lái)說(shuō),二維繪圖函數(shù)在不新增坐標(biāo)軸的情況下,可以指定一個(gè)z軸方向,然后在z=0的平面內(nèi)進(jìn)行繪圖,支持這種特性的函數(shù)有下面這幾個(gè)
函數(shù) | 坐標(biāo)參數(shù) | 圖形類別 | |
---|---|---|---|
plot | x,y | 曲線圖 | 默認(rèn)z=0 |
scatter | x,y | 散點(diǎn)圖 | 默認(rèn)z=0 |
step | x,y | 步階圖 | 默認(rèn)z=0 |
bar | x,y | 條形圖 | 默認(rèn)z=0 |
函數(shù) 坐標(biāo)參數(shù) 圖形類別 plotx,y曲線圖默認(rèn)z=0scatterx,y散點(diǎn)圖默認(rèn)z=0stepx,y步階圖默認(rèn)z=0barx,y條形圖默認(rèn)z=0
import matplotlib.pyplot as plt import numpy as np x = np.arange(25)/3 y = np.sin(x) keys = ["plot", "scatter", "step", "bar"] fig = plt.figure(figsize=(14,4)) for i,key in enumerate(keys, 1): ax = fig.add_subplot(1, 4, i, projection="3d") fDct = {"plot" : ax.plot, "scatter" : ax.scatter, "step" : ax.step, "bar" : ax.bar} fDct[key](x,y) plt.title(key) plt.tight_layout() plt.show()
如果可以輸入三個(gè)坐標(biāo),那么就不必指定zdir了,但x,y,z必須是一維數(shù)組,只有scatter例外。
函數(shù) | 坐標(biāo)參數(shù) | 圖形類別 | 同名函數(shù) |
---|---|---|---|
plot | x, y, z | 曲線圖 | |
scatter | x, y, z | 散點(diǎn)圖 | 可以是二維網(wǎng)格 |
step | x, y, z | 步階圖 | |
bar | x, y, z | 條形圖 | |
stem | x, y, z | 莖葉圖 |
三維圖
繪圖函數(shù) | 坐標(biāo) | 繪圖類型 | 坐標(biāo)說(shuō)明 |
---|---|---|---|
plot_surface | x,y,z | 三維曲面圖 | x,y必須是網(wǎng)格 |
plot_wireframe | x,y,z | 三維網(wǎng)格圖 | x,y必須是網(wǎng)格 |
plot_trisurf | x,y,z | 三角曲面圖 | x,y,z是一維數(shù)組 |
import matplotlib.pyplot as plt from matplotlib import cm import numpy as np X, Y = np.indices([30, 30])/3 - 5 Z = np.sin(np.sqrt(X**2 + Y**2)) fig = plt.figure(figsize=(12,5)) ax = fig.add_subplot(131, projection='3d') ax.plot_surface(X, Y, Z) plt.title("plot_surface") ax = fig.add_subplot(132, projection='3d') ax.plot_wireframe(X, Y, Z) plt.title("plot_wireframe") ax = fig.add_subplot(133, projection='3d') ax.plot_trisurf(X.reshape(-1), Y.reshape(-1), Z.reshape(-1)) plt.title("plot_trisurf") plt.tight_layout() plt.show()
誤差線
二維坐標(biāo)中的誤差線函數(shù) errorbar
在三維投影下仍然適用,并且支持z方向的誤差線
x = np.arange(25)/3 y = np.sin(x) z = np.cos(x) y1, y2 = 0.9*y, 1.1*y x1, x2 = 0.9*x, 1.1*x z1, z2 = 0.9*z, 1.1*z xerr = np.abs([x1, x2])/10 yerr = np.abs([y1, y2])/10 zerr = np.abs([z1, z2])/10 fig = plt.figure(figsize=(10,3)) ax = fig.add_subplot(131, projection='3d') ax.errorbar(x, y, z, yerr=yerr) plt.title("errorbar with yerr") ax = fig.add_subplot(132, projection='3d') ax.errorbar(x, y, z, xerr=xerr) plt.title("errorbar with xerr") ax = fig.add_subplot(133, projection='3d') ax.errorbar(x, y, z, zerr=zerr) plt.title("errorbar with zerr") plt.tight_layout() plt.show()
效果如下
等高線
等高線理所當(dāng)然地支持三維坐標(biāo)圖,畢竟在沒(méi)有第三個(gè)軸的情況下,等高線圖都會(huì)用偽彩色來(lái)顯示高度,現(xiàn)在有了第三個(gè)軸,那必須得墻裂支持。
但對(duì)于contourf而言,并不會(huì)把登高平面銜接起來(lái),所以看上去就像梯田一樣,所以不建議在3D坐標(biāo)中直接繪制contourf圖像,而是聲名一個(gè)z軸,繪制這個(gè)z軸方向的投影
X, Y = np.indices([100,100])/30 - 1.5 Z = (1 - X/2 + X**5 + Y**3) * np.exp(-X**2 - Y**2) fig = plt.figure(figsize=(10,3)) ax = fig.add_subplot(131, projection='3d') ax.contour(X, Y, Z) plt.title("contour") ax = fig.add_subplot(132, projection='3d') ax.contourf(X, Y, Z) plt.title("contourf") ax = fig.add_subplot(133, projection='3d') ax.contourf(X, Y, Z, zdir='y', offset=0) plt.title("contourf with zdir=y") plt.tight_layout() plt.show()
其中,第三幅圖是整個(gè)等高線圖在z軸方向的投影,可以理解為左視圖。
場(chǎng)圖
場(chǎng)圖也是可以支持三維數(shù)據(jù)的,只不過(guò)需要6個(gè)坐標(biāo)而已,記作x,y,z,u,v,w,但流場(chǎng)和風(fēng)場(chǎng)就不支持三維圖像了。
Y, X, Z = np.indices([4,4,4])/0.5 - 3 U = X + Y V = Y - X W = X + Y - Z ax = plt.subplot(projection='3d') ax.quiver(X, Y, Z, U, V, W, length=0.2) plt.title("quiver") plt.tight_layout() plt.show()
統(tǒng)計(jì)圖
hist和boxplot在3D坐標(biāo)中是可以繪制出來(lái)的,但是并不支持指定坐標(biāo)軸,也不支持指定繪圖位置,所以并不建議在3D坐標(biāo)系中使用,下面僅做下展示
x = np.random.standard_normal(size=1000) fig = plt.figure(figsize=(9,4)) ax = fig.add_subplot(121, projection='3d') ax.hist(x) plt.title("hist") ax = fig.add_subplot(122, projection='3d') ax.boxplot(x) plt.title("boxplot") plt.tight_layout() plt.show()
非結(jié)構(gòu)坐標(biāo)圖
tricontour和tricontourf支持三維坐標(biāo),而triplot盡管在3維坐標(biāo)系下不報(bào)錯(cuò),但繪制的其實(shí)是二維圖像,所以并不推薦。另一方面,和contourf類似,tricontourf所產(chǎn)生從登高面,同樣并不會(huì)彼此銜接,所以觀感其實(shí)是比較奇怪的,所以在三維坐標(biāo)系中,比較推薦的非結(jié)構(gòu)坐標(biāo)圖就只有tricontour這一個(gè)。
x = np.random.uniform(-4, 4, 256) y = np.random.uniform(-2, 2, 256) z = (1 - x/2 + x**5 + y**3) * np.exp(-x**2 - y**2) levels = np.linspace(z.min(), z.max(), 7) fig = plt.figure(figsize=(9,4)) ax = fig.add_subplot(121, projection='3d') ax.plot(x, y, z, 'o', markersize=1, alpha=0.5) ax.tricontour(x, y, z, levels=levels) plt.title("tricontour") ax = fig.add_subplot(122, projection='3d') ax.plot(x, y, z, 'o', markersize=1, alpha=0.5) ax.tricontourf(x, y, z, levels=levels) plt.title("tricontourf") plt.tight_layout() plt.show()
以上就是python中15種3D繪圖函數(shù)總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于python繪圖函數(shù)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
tensorflow 恢復(fù)指定層與不同層指定不同學(xué)習(xí)率的方法
今天小編就為大家分享一篇tensorflow 恢復(fù)指定層與不同層指定不同學(xué)習(xí)率的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-07-07Python使用turtle庫(kù)繪制科赫雪花詳細(xì)代碼
科赫曲線是一種分形,其形態(tài)非常像雪花,因此又被稱作科赫雪花、雪花曲線,這篇文章主要給大家介紹了關(guān)于Python使用turtle庫(kù)繪制科赫雪花的相關(guān)資料,需要的朋友可以參考下2024-05-05Django商城項(xiàng)目注冊(cè)功能的實(shí)現(xiàn)
注冊(cè)功能是網(wǎng)頁(yè)項(xiàng)目必備的需求,本文提供了一個(gè)Django項(xiàng)目實(shí)現(xiàn)注冊(cè)功能的示例,有此需求的同學(xué)可以參考下2021-06-06Python+PyQt5實(shí)現(xiàn)網(wǎng)口功能測(cè)試詳解
這篇文章主要為大家詳細(xì)介紹了Python+PyQt5實(shí)現(xiàn)網(wǎng)口功能測(cè)試的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-02-02深入理解?Python?中的?pip?虛擬環(huán)境(最佳實(shí)踐)
本文深入講解了Python中pip虛擬環(huán)境的概念及其重要性,并詳細(xì)介紹了如何創(chuàng)建、激活和管理虛擬環(huán)境,以及如何使用requirements.txt文件記錄和管理項(xiàng)目依賴,文章指出,使用虛擬環(huán)境可以有效避免依賴沖突,為每個(gè)項(xiàng)目提供一個(gè)干凈的開(kāi)發(fā)環(huán)境,使得項(xiàng)目更易于維護(hù)和部署2024-10-10pycharm終端無(wú)法激活conda環(huán)境的解決辦法
如果您在PyCharm終端中無(wú)法激活conda環(huán)境,可能是由于PyCharm沒(méi)有正確配置conda解釋器,這篇文章主要給大家介紹了關(guān)于pycharm終端無(wú)法激活conda環(huán)境的解決辦法,需要的朋友可以參考下2023-09-09