python中15種3D繪圖函數(shù)總結(jié)
基礎(chǔ)圖
一般來說,二維繪圖函數(shù)在不新增坐標軸的情況下,可以指定一個z軸方向,然后在z=0的平面內(nèi)進行繪圖,支持這種特性的函數(shù)有下面這幾個
| 函數(shù) | 坐標參數(shù) | 圖形類別 | |
|---|---|---|---|
| plot | x,y | 曲線圖 | 默認z=0 |
| scatter | x,y | 散點圖 | 默認z=0 |
| step | x,y | 步階圖 | 默認z=0 |
| bar | x,y | 條形圖 | 默認z=0 |
函數(shù) 坐標參數(shù) 圖形類別 plotx,y曲線圖默認z=0scatterx,y散點圖默認z=0stepx,y步階圖默認z=0barx,y條形圖默認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()
如果可以輸入三個坐標,那么就不必指定zdir了,但x,y,z必須是一維數(shù)組,只有scatter例外。
| 函數(shù) | 坐標參數(shù) | 圖形類別 | 同名函數(shù) |
|---|---|---|---|
| plot | x, y, z | 曲線圖 | |
| scatter | x, y, z | 散點圖 | 可以是二維網(wǎng)格 |
| step | x, y, z | 步階圖 | |
| bar | x, y, z | 條形圖 | |
| stem | x, y, z | 莖葉圖 |

三維圖
| 繪圖函數(shù) | 坐標 | 繪圖類型 | 坐標說明 |
|---|---|---|---|
| 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()
誤差線
二維坐標中的誤差線函數(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()效果如下

等高線
等高線理所當然地支持三維坐標圖,畢竟在沒有第三個軸的情況下,等高線圖都會用偽彩色來顯示高度,現(xiàn)在有了第三個軸,那必須得墻裂支持。
但對于contourf而言,并不會把登高平面銜接起來,所以看上去就像梯田一樣,所以不建議在3D坐標中直接繪制contourf圖像,而是聲名一個z軸,繪制這個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()
其中,第三幅圖是整個等高線圖在z軸方向的投影,可以理解為左視圖。
場圖
場圖也是可以支持三維數(shù)據(jù)的,只不過需要6個坐標而已,記作x,y,z,u,v,w,但流場和風場就不支持三維圖像了。
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)計圖
hist和boxplot在3D坐標中是可以繪制出來的,但是并不支持指定坐標軸,也不支持指定繪圖位置,所以并不建議在3D坐標系中使用,下面僅做下展示
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)坐標圖
tricontour和tricontourf支持三維坐標,而triplot盡管在3維坐標系下不報錯,但繪制的其實是二維圖像,所以并不推薦。另一方面,和contourf類似,tricontourf所產(chǎn)生從登高面,同樣并不會彼此銜接,所以觀感其實是比較奇怪的,所以在三維坐標系中,比較推薦的非結(jié)構(gòu)坐標圖就只有tricontour這一個。
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é)的詳細內(nèi)容,更多關(guān)于python繪圖函數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
查找python項目依賴并生成requirements.txt的方法
今天小編就為大家分享一篇查找python項目依賴并生成requirements.txt的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07
python中scipy.stats產(chǎn)生隨機數(shù)實例講解
在本篇文章里小編給大家分享的是一篇關(guān)于python中scipy.stats產(chǎn)生隨機數(shù)實例講解內(nèi)容,有需要的朋友們可以學習下。2021-02-02
python3.6.3轉(zhuǎn)化為win-exe文件發(fā)布的方法
今天小編就為大家分享一篇python3.6.3轉(zhuǎn)化為win-exe文件發(fā)布的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-10-10
python數(shù)據(jù)庫PooledDB連接池初始化使用示例
這篇文章主要為大家介紹了python數(shù)據(jù)庫PooledDB連接池初始化使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
Django請求響應(yīng)Web Http交互的核心機制深入理解
本文深入探討了 Django 中的請求與響應(yīng)處理,從 Django 請求和響應(yīng)的基礎(chǔ)知識、生命周期,到 HttpRequest 和 HttpResponse 對象的詳細介紹,同時,討論了 Django 的視圖和請求、響應(yīng)處理,以及安全性和異步處理的考慮2023-09-09
python基礎(chǔ)之編碼規(guī)范總結(jié)
今天帶大家來學習python基礎(chǔ)知識,文中對python編碼規(guī)范作了詳細的介紹,對正在學習python的小伙伴們很有幫助,需要的朋友可以參考下2021-05-05
使用Python實現(xiàn)Excel文件中的查找并替換功能
在處理大型電子表格時,查找和替換功能是一項極其重要的工具,本文將詳細介紹如何使用 Spire.XLS for Python 庫在 Excel 文件中執(zhí)行查找和替換操作,希望可以幫助大家構(gòu)建完整的 Excel 數(shù)據(jù)處理解決方案2026-05-05

