怎么使用python繪制3D瀑布圖
成品:
代碼:
import matplotlib.pyplot as plt import matplotlib.ticker as ticker from mpl_toolkits.mplot3d.art3d import Poly3DCollection import numpy as np def line_3d(x, y, z, x_label_indexs): """ 在y軸的每個(gè)點(diǎn),向x軸的方向延伸出一個(gè)折線面:展示每個(gè)變量的時(shí)序變化。 x: x軸,時(shí)間維,右邊。 y: y軸,變量維,左邊。 z: z軸,數(shù)值維。二維矩陣,y列x行。每一行是對(duì)應(yīng)變量的一個(gè)時(shí)間序列。 x_label_indexs: 需要標(biāo)注的時(shí)間點(diǎn)。 """ x_num = len(x) y_num = len(y) if z.shape[0] != y_num or z.shape[1] != x_num: return -1 # 制作坐標(biāo)格點(diǎn)(z中每個(gè)點(diǎn)對(duì)應(yīng)的x、y坐標(biāo)) X, Y = np.meshgrid(x, y) # 初始化 canvas = plt.figure() # 創(chuàng)建畫(huà)布 axs = canvas.add_subplot(111, projection='3d') # 添加三維子圖 # 若把111改成234,則意思是:創(chuàng)建一個(gè)2*3的網(wǎng)格,并在第4個(gè)格子中創(chuàng)建一個(gè)axes # 繪制折線面 for i in range(y_num): # 遍歷 # z值線,即實(shí)際數(shù)據(jù)。 axs.plot(Y[i], X[i], z[i], color=plt.cm.viridis(i/y_num), linestyle='-', linewidth=1, marker='o', markersize=3, alpha=0.3) # 0值線(z=0),與“地面”連接。 axs.plot(Y[i], X[i], np.zeros_like(z[i]), color='gray', alpha=0.5) # 繪制有顏色的平面:本質(zhì)是填充z值與0值之間的區(qū)域。 polygon = [ [Y[i, 0], X[i, 0], 0], # 左下 [Y[i, -1], X[i, -1], 0], # 右下 ] for j in range(x_num-1, -1, -1): # 依次添加點(diǎn),使得polygon成為一個(gè)完整的閉合多邊形 polygon.append([Y[i, j], X[i, j], z[i, j]]) axs.add_collection3d(Poly3DCollection([polygon], color=plt.cm.viridis(i/y_num), alpha=0.3)) # 標(biāo)注數(shù)字(z值) for k in x_label_indexs: axs.text(Y[i, k]-0.05, X[i, k], z[i, k]+0.02, f'{z[i, k]:.2f}', color='black', ha='center', size=7) # 用虛線將需要標(biāo)注的時(shí)間(y)連起來(lái) for k in x_label_indexs: axs.plot(Y[:, k], X[:, k], z[:, k], linestyle='--', linewidth=0.8, color='gray') axs.grid() plt.show() if __name__ == '__main__': x = np.arange(5) time = np.arange(1, 15, 2) z = np.array( [ [0.20, 0.34, 0.38, 0.43, 0.44, 0.50, 0.61], [0.21, 0.40, 0.38, 0.43, 0.60, 0.72, 0.75], [0.22, 0.43, 0.44, 0.60, 0.77, 0.84, 0.92], [0.23, 0.42, 0.44, 0.43, 0.64, 0.77, 0.86], [0.38, 0.42, 0.43, 0.49, 0.55, 0.60, 0.81] ] ) line_3d(time, x, z, [1, 4, 6])
總結(jié)
到此這篇關(guān)于怎么使用python繪制3D瀑布圖的文章就介紹到這了,更多相關(guān)python繪制3D瀑布圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于Python3.6中的OpenCV實(shí)現(xiàn)圖片色彩空間的轉(zhuǎn)換
這篇文章主要介紹了基于Python3.6的OpenCV實(shí)現(xiàn)圖片色彩空間的轉(zhuǎn)換,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02python sqlobject(mysql)中文亂碼解決方法
在使用python寫(xiě)項(xiàng)目的時(shí)候,用到了sqlobject庫(kù)函數(shù)connectionForURI連接mysql,但是遇到了中文顯示亂碼的問(wèn)題,在添加記錄的時(shí)候還拋出異常2008-11-11Python入門(mén)_淺談for循環(huán)、while循環(huán)
下面小編就為大家?guī)?lái)一篇Python入門(mén)_淺談for循環(huán)、while循環(huán)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05給Python中的MySQLdb模塊添加超時(shí)功能的教程
這篇文章主要介紹了給Python中的MySQLdb模塊添加超時(shí)功能的教程,timeout功能在服務(wù)器的運(yùn)維當(dāng)中非常有用,需要的朋友可以參考下2015-05-05python五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn)
這篇文章主要為大家詳細(xì)介紹了python五子棋游戲的設(shè)計(jì)與實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Python分析微信好友性別比例和省份城市分布比例的方法示例【基于itchat模塊】
這篇文章主要介紹了Python分析微信好友性別比例和省份城市分布比例的方法,結(jié)合實(shí)例形式分析了Python基于itchat模塊獲取及計(jì)算微信好友相關(guān)信息操作技巧,需要的朋友可以參考下2020-05-05Python中from…import *和import區(qū)別小結(jié)
本文介紹了Python中import和from...import兩種導(dǎo)入模塊的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12