Python+Matplotlib繪制3D圖像的示例詳解
1. 繪制3D柱狀圖
繪制3D柱狀圖使用的是axes3d.bar()方法。
可能跟我們中學(xué)學(xué)的有一點(diǎn)不同的是,其語(yǔ)法如下:
bar(left, height, zs=0, zdir=‘z’, *args, **kwargs)
其中l(wèi)eft表示指向側(cè)邊的軸,zs表示指向我們的方向的軸,height即表示高度的軸。這三者都需要是一維的序列對(duì)象。
在調(diào)用相關(guān)方法的時(shí)候,比如設(shè)置軸標(biāo)簽,還有一點(diǎn)需要區(qū)分的是,left對(duì)應(yīng)的是y軸,zs對(duì)應(yīng)的是x軸。(意思就是說(shuō),比如使用plt.xticks()方法,操作的是zs;而使用plt.yticks()方法則操作的是left軸。height對(duì)應(yīng)著z軸。)
一段完整的代碼示例如下:
import matplotlib.pyplot as plt from mpl_toolkits.mplot3d.axes3d import Axes3D import numpy as np plt.rcParams['axes.unicode_minus'] = False plt.rcParams['axes.facecolor'] = '#cc00ff' plt.rcParams['font.sans-serif'] = ['STKAITI'] # 創(chuàng)建畫布 fig = plt.figure() # 創(chuàng)建3D坐標(biāo)系 axes3d = Axes3D(fig) zs = range(5) left = np.arange(0, 10) height = np.array([]) for i in range(len(zs)): z = zs[i] np.random.seed(i) height = np.random.randint(0, 30, size=10) axes3d.bar(left, height, zs=z, zdir='x', color=['red', 'green', 'purple', 'yellow', 'blue', 'black', 'gray', 'orange', 'pink', 'cyan']) plt.xticks(zs, ['1月份', '2月份', '3月份', '4月份', '5月份']) plt.yticks(left, ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G']) plt.xlabel('月份') plt.ylabel('型號(hào)') plt.show()
圖像效果如下:
2. 繪制3D曲面圖
示例1
繪制曲面圖使用的是plot_surface()方法,這個(gè)方法的參數(shù)相對(duì)而言更簡(jiǎn)單。且X、Y、Z三者的順序相對(duì)較為容易分辨。
通過(guò)讀示例代碼,即可快速掌握其用法:
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D plt.rcParams['font.sans-serif'] = ['STKAITI'] plt.rcParams['axes.unicode_minus'] = False plt.rcParams['axes.facecolor'] = '#cc00ff' fig = plt.figure(figsize=(10, 8), facecolor='#cc00ff') ax = Axes3D(fig) delta = 0.125 # 生成代表X軸數(shù)據(jù)的列表 x = np.arange(-4.0, 4.0, delta) # 生成代表Y軸數(shù)據(jù)的列表 y = np.arange(-3.0, 4.0, delta) # 對(duì)x、y數(shù)據(jù)執(zhí)行網(wǎng)格化 X, Y = np.meshgrid(x, y) Z1 = np.exp(-X**2 - Y**2) Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2) # 計(jì)算Z軸數(shù)據(jù)(高度數(shù)據(jù)) Z = (Z1 - Z2) * 2 # 繪制3D圖形 ax.plot_surface(X, Y, Z, rstride=1, # rstride(row)指定行的跨度 cstride=1, # cstride(column)指定列的跨度 cmap=plt.get_cmap('rainbow')) # 設(shè)置顏色映射 plt.xlabel('X軸', fontsize=15) plt.ylabel('Y軸', fontsize=15) ax.set_zlabel('Z軸', fontsize=15) ax.set_title('《曲面圖》', y=1.02, fontsize=25, color='gold') # 設(shè)置Z軸范圍 ax.set_zlim(-2, 2) plt.show()
示例2
更換一組數(shù)據(jù),呈現(xiàn)的則是另一種藝術(shù)效果:
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D plt.rcParams['font.sans-serif'] = ['STKAITI'] plt.rcParams['axes.unicode_minus'] = False plt.rcParams['axes.facecolor'] = '#cc00ff' fig = plt.figure(figsize=(12, 10), facecolor='#cc00ff') ax = Axes3D(fig) delta = 0.125 # 生成代表X軸數(shù)據(jù)的列表 x = np.linspace(-2, 2, 10) # 生成代表Y軸數(shù)據(jù)的列表 y = np.linspace(-2, 2, 10) # 對(duì)x、y數(shù)據(jù)執(zhí)行網(wǎng)格化 X, Y = np.meshgrid(x, y) # 計(jì)算Z軸數(shù)據(jù)(高度數(shù)據(jù)) Z = X**2 - Y**2 # 繪制3D圖形 ax.plot_surface(X, Y, Z, rstride=1, # rstride(row)指定行的跨度 cstride=1, # cstride(column)指定列的跨度 cmap=plt.get_cmap('rainbow')) # 設(shè)置顏色映射 plt.xlabel('X軸', fontsize=15) plt.ylabel('Y軸', fontsize=15) ax.set_zlabel('Z軸', fontsize=15) ax.set_title('《曲面圖》', y=1.02, fontsize=25, color='gold') plt.show()
3.繪制3D散點(diǎn)圖
在3D曲面圖示例1的基礎(chǔ)上稍作修改。
繪制散點(diǎn)圖使用scatter()方法,將散點(diǎn)顏色設(shè)置為綠色,紅色邊沿。
代碼示例如下:
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D plt.rcParams['font.sans-serif'] = ['STKAITI'] plt.rcParams['axes.unicode_minus'] = False plt.rcParams['axes.facecolor'] = '#cc00ff' fig = plt.figure(figsize=(10, 8), facecolor='#cc00ff') ax = Axes3D(fig) delta = 0.125 # 生成代表X軸數(shù)據(jù)的列表 x = np.arange(-4.0, 4.0, delta) # 生成代表Y軸數(shù)據(jù)的列表 y = np.arange(-3.0, 4.0, delta) # 對(duì)x、y數(shù)據(jù)執(zhí)行網(wǎng)格化 X, Y = np.meshgrid(x, y) Z1 = np.exp(-X**2 - Y**2) Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2) # 計(jì)算Z軸數(shù)據(jù)(高度數(shù)據(jù)) Z = (Z1 - Z2) * 2 # 繪制3D圖形 ax.scatter(X, Y, Z, c='green', edgecolors='red') plt.xlabel('X軸', fontsize=15) plt.ylabel('Y軸', fontsize=15) ax.set_zlabel('Z軸', fontsize=15) ax.set_title('《散點(diǎn)圖》', y=1.02, fontsize=25, color='gold') # 設(shè)置Z軸范圍 ax.set_zlim(-2, 2) plt.show()
繪圖效果如下:
4. 繪制3D曲線圖
繪制曲線圖,使用的則是我們最最最熟悉的plot()方法。
其他部分基本不變,數(shù)據(jù)部分生成三組適合我們繪圖的數(shù)據(jù),線條為金色,寬度設(shè)定為3.
代碼如下:
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D plt.rcParams['font.sans-serif'] = ['STKAITI'] plt.rcParams['axes.unicode_minus'] = False plt.rcParams['axes.facecolor'] = '#cc00ff' fig = plt.figure(figsize=(10, 8), facecolor='#cc00ff') ax = Axes3D(fig) theta = np.linspace(0, 3.14*10, 1000) r = np.linspace(0, 1, 1000) x = r * np.cos(theta) y = r * np.sin(theta) z = np.linspace(0, 4, 1000) ax.plot(x, y, z, color='gold', lw=3) plt.xlabel('X軸', fontsize=15) plt.ylabel('Y軸', fontsize=15) ax.set_zlabel('Z軸', fontsize=15) ax.set_title('《曲線圖》', y=1.02, fontsize=25, color='gold') plt.show()
圖像效果如下:
以上就是Python+Matplotlib繪制3D圖像的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Python Matplotlib 3D圖像的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
python動(dòng)態(tài)參數(shù)用法實(shí)例分析
這篇文章主要介紹了python動(dòng)態(tài)參數(shù)用法,以實(shí)例形式較為詳細(xì)的分析了Python中動(dòng)態(tài)參數(shù)的功能及使用技巧,需要的朋友可以參考下2015-05-05Python機(jī)器學(xué)習(xí)之決策樹(shù)
這篇文章主要介紹了Python機(jī)器學(xué)習(xí)之決策樹(shù),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04Python實(shí)現(xiàn)打印金字塔圖案的方法詳解
使用簡(jiǎn)單的?for?循環(huán)在?python?中打印模式。第一個(gè)外循環(huán)用于處理行數(shù),?而內(nèi)嵌套循環(huán)用于處理列數(shù)。操作打印語(yǔ)句,可以打印不同的數(shù)字圖案、字母圖案或星形圖案。本文將利用這些方法實(shí)現(xiàn)打印金字塔圖案,需要的可以參考一下2022-09-09Python調(diào)用ChatGPT的API實(shí)現(xiàn)文章生成
最近ChatGPT大火,在3.5版本后開(kāi)放了接口API,所以很多人開(kāi)始進(jìn)行實(shí)操,這里我就用python來(lái)為大家實(shí)現(xiàn)一下,如何調(diào)用API并提問(wèn)返回文章的說(shuō)明2023-03-03Python中requests、aiohttp、httpx性能比拼
本文主要介紹了Python中requests、aiohttp、httpx性能比拼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06詳解Python安裝tesserocr遇到的各種問(wèn)題及解決辦法
這篇文章主要介紹了詳解Python安裝tesserocr遇到的各種問(wèn)題及解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03詳解從Django Rest Framework響應(yīng)中刪除空字段
這篇文章主要介紹了詳解從Django Rest Framework響應(yīng)中刪除空字段,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01python實(shí)現(xiàn)顏色空間轉(zhuǎn)換程序(Tkinter)
這篇文章主要介紹了基于Tkinter利用python實(shí)現(xiàn)顏色空間轉(zhuǎn)換程序,感興趣的小伙伴們可以參考一下2015-12-12