由于項(xiàng)目的需要,一直苦于將多層數(shù)據(jù)集累加起來做成一個(gè)呈堆積狀的三維圖,有點(diǎn)類似于地形圖(實(shí)則熱力圖),但又不是地形圖。
先說說項(xiàng)目背景,本菜雞是搞故障診斷的,所以免不了用上一些統(tǒng)計(jì)學(xué)的知識,看過之前我的Blog的都會發(fā)現(xiàn), T 2 T^2 T2 和 S P E SPE SPE 在故障診斷鄰域或者說是再小范圍一點(diǎn),在過程監(jiān)控鄰域,是很好用且很關(guān)鍵的兩個(gè)統(tǒng)計(jì)量,用于監(jiān)測過程中的一些有故障的檢測點(diǎn)或者區(qū)間,會有閾值限,超過閾值的則判斷為故障,反而,則為正常。具體可以看->這里。
之前嘗試過很多中方法來實(shí)現(xiàn)三維圖,但是,。。。,但是均沒實(shí)現(xiàn)完美的效果,如Echarts、Pyecharts、Plotly等等,最終還是只有用yyds<Matplotlib>,真的,沒有它解決不了的可視化問題!!!
明確一下我們的輸入,簡單來說,三維三維,不就是三個(gè)維度嘛。X、Y、Z三個(gè)方向,我們項(xiàng)目的數(shù)據(jù)是X、Y是對于多層 T 2 T^2 T2 或 S P E SPE SPE統(tǒng)計(jì)量的值都是對應(yīng)的,簡單來說,比如第一層的 T 2 T^2 T2值和第二層到最后一層的 T 2 T^2 T2 值所對應(yīng)的X和Y坐標(biāo)都是一個(gè)坐標(biāo),而不同層次的 T 2 T^2 T2 值,則是代表高低不同的Z軸的值,而我們需要做的就是將多層的Z按照X、Y的坐標(biāo)位置給疊加起來,我們的輸入如下。
(數(shù)據(jù)就像上面那樣,這里我們以 T 2 T^2 T2 的多層可視化為例展開吧)
那么下面我們直接開始搞可視化吧!!!
輸出最終則為我們的可視化三維圖,先不爆料,看后續(xù)。
我們用的Python來實(shí)現(xiàn)可視化。
庫先給導(dǎo)入進(jìn)來:
import matplotlib.pyplot as plt # 可視化的matplotlib庫import pandas as pd # 數(shù)據(jù)表操作的庫from mpl_toolkits.mplot3d import Axes3D # 三維可視化from icecream import ic # 類似于print輸出
雖然我們的代碼不是很長,但為了代碼的規(guī)范和美觀,建議還是講其封裝為一個(gè)一個(gè)的function,這樣調(diào)用起來更方便。
def loaddata(filename): """ 讀取傳入得數(shù)據(jù)表 """ dtf = pd.read_csv(filename) # 讀取表格文件 return dtf
def T2_plot(df_value, df_xy): """ 繪制T2三維熱力圖 """ #獲取行列數(shù) q1 = df_value.shape[1] # 列數(shù) r1 = df_value.shape[0] # 行數(shù) print("x_y有%r行,%r列。" % (r1, q1)) X = [] Y = [] Z = [] # 設(shè)置空數(shù)組備用 for a in range(2, q1): # 選擇需要疊加的Value量選值范圍2~11, 應(yīng)該遍歷所有列,因?yàn)槊總€(gè)數(shù)據(jù)表的維度不一定一致,所以最大通過獲取的列傳入 for xx in range(r1 + 1): # 循環(huán)迭代不同的層數(shù) if xx < r1: IIx = df_xy.iloc[xx, 0] # 取第一列的值 IIy = df_xy.iloc[xx, 1] # 取第二列的值 IIz = df_value.iloc[xx, a] # 取相應(yīng)的T2或SPE的值 # 將每個(gè)坐標(biāo)軸X,y及其T2或SPE的值存入一個(gè)list中 X.append(IIx) Y.append(IIy) Z.append(IIz) ic(len(Z)) # 查看Z的數(shù)量 # 開始制圖 fig = plt.figure() ax = Axes3D(fig) ax.set_xlabel("IX", fontsize=10, color="black") # 設(shè)置x標(biāo)簽及其參數(shù) ax.set_ylabel("JY", fontsize=10, color="black") # 設(shè)置y標(biāo)簽及其參數(shù) ax.set_zlabel("Value", fontsize=10, color="black") # 設(shè)置z標(biāo)簽及其參數(shù) ax.plot_trisurf(X, Y, Z, cmap=plt.get_cmap("jet"), linewidth=0.1) # 三角表面圖 plt.show() # 渲染3D圖顯示
# 主函數(shù)if __name__=="__main__": # 導(dǎo)入數(shù)據(jù)表文件名 T2_name = "T2.csv" xy_name = "x_y.csv" # 讀取數(shù)據(jù)表 t2 = loaddata(T2_name) xy = loaddata(xy_name) # 制作T2三維圖 T2_plot(df_value=t2, df_xy=xy)
最終的效果圖像這樣:
換個(gè)方位再來一張:
讓我們再看看底部:
深色的地方則是有多個(gè)相近的點(diǎn)堆積到一起的,所以會在那些點(diǎn)顯得顏色很深。
來個(gè)大匯總,完整代碼:
import matplotlib.pyplot as pltimport pandas as pdfrom mpl_toolkits.mplot3d import Axes3Dfrom icecream import ic# 讀取數(shù)據(jù)表def loaddata(filename): """ 讀取傳入得數(shù)據(jù)表 """ dtf = pd.read_csv(filename) # 讀取表格文件 return dtf# T2三維熱力圖def T2_plot(df_value, df_xy): """ 繪制T2三維熱力圖 todo:完善 """ #獲取行列數(shù) q1 = df_value.shape[1] # 列數(shù) r1 = df_value.shape[0] # 行數(shù) print("x_y有%r行,%r列。" % (r1, q1)) X = [] Y = [] Z = [] # 設(shè)置空數(shù)組備用 for a in range(2, q1): # 選擇需要疊加的Value量選值范圍2~11, 應(yīng)該遍歷所有列,因?yàn)槊總€(gè)數(shù)據(jù)表的維度不一定一致,所以最大通過獲取的列傳入 for xx in range(r1 + 1): # 循環(huán)迭代不同的層數(shù) if xx < r1: IIx = df_xy.iloc[xx, 0] # 取第一列的值 IIy = df_xy.iloc[xx, 1] # 取第二列的值 IIz = df_value.iloc[xx, a] # 取相應(yīng)的T2或SPE的值 # 將每個(gè)坐標(biāo)軸X,y及其T2或SPE的值存入一個(gè)list中 X.append(IIx) Y.append(IIy) Z.append(IIz) ic(len(Z)) # 查看Z的數(shù)量 # 開始制圖 fig = plt.figure() ax = Axes3D(fig) ax.set_xlabel("IX", fontsize=10, color="black") # 設(shè)置x標(biāo)簽及其參數(shù) ax.set_ylabel("JY", fontsize=10, color="black") # 設(shè)置y標(biāo)簽及其參數(shù) ax.set_zlabel("Value", fontsize=10, color="black") # 設(shè)置z標(biāo)簽及其參數(shù) ax.plot_trisurf(X, Y, Z, cmap=plt.get_cmap("jet"), linewidth=0.1) # 三角表面圖 plt.show() # 渲染3D圖顯示# 主函數(shù)if __name__=="__main__": # 導(dǎo)入數(shù)據(jù)表文件名 T2_name = "T2.csv" xy_name = "x_y.csv" # 讀取數(shù)據(jù)表 t2 = loaddata(T2_name) xy = loaddata(xy_name) # 制作T2三維圖 T2_plot(df_value=t2, df_xy=xy)
?堅(jiān)持讀Paper,堅(jiān)持做筆記,堅(jiān)持學(xué)習(xí)?!!!
?To Be No.1??哈哈哈哈
學(xué)習(xí)DeepLearning堅(jiān)持!30天計(jì)劃!!!
打卡 第 5 /30 Day!!!
?創(chuàng)作不易?,過路能?關(guān)注、收藏、點(diǎn)個(gè)贊?三連就最好不過了
?( ′???` )
?
『
愿我有生之年,得見您君臨天下。
』
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/120977.html
摘要:國產(chǎn)可視化庫,應(yīng)用廣泛,免費(fèi),開源。下次面對數(shù)據(jù)分析任務(wù),就可以參考可視化方法選型中的思路,根據(jù)你的需求,選擇適當(dāng)?shù)膱D表進(jìn)行可視化。 引言 針對不同的數(shù)據(jù)類型和數(shù)據(jù)...
摘要:一引言本項(xiàng)目基于邏輯回歸理論,運(yùn)用語言對數(shù)據(jù)集進(jìn)行分析,實(shí)現(xiàn)對糖尿病視網(wǎng)膜病變的檢測。可以確定這五個(gè)變量是導(dǎo)致糖尿病視網(wǎng)膜病變的主要因素。 一. 引言 本項(xiàng)目基于邏...
摘要:目前支持散點(diǎn)圍欄熱力網(wǎng)格聚合等方式致力于讓大數(shù)據(jù)可視化變得簡單易用。如圖表示,紅色區(qū)域表示分析要素的密度大,而藍(lán)色區(qū)域表示分析要素的密度小。實(shí)現(xiàn)熱力原理讀取每個(gè)像素的值透明度,做一個(gè)顏色映射。 本文作者:TalkingData 可視化工程師李鳳祿編輯:Aresn 歡迎加入 QQ 群參與技術(shù)討論:618308202 inMap 是一款基于 canvas 的大數(shù)據(jù)可視化庫,專注于大數(shù)據(jù)方...
摘要:在我們科研工作中,將數(shù)據(jù)完美展現(xiàn)出來尤為重要。數(shù)據(jù)可視化是以數(shù)據(jù)為視角,探索世界。我們真正想要的是數(shù)據(jù)視覺,以數(shù)據(jù)為工具,以可視化為手段,目的是描述真實(shí),探索世界。 ...
摘要:渲染能力采用渲染除了對使用,一般來說,更適合繪制圖形元素?cái)?shù)量非常大這一般是由數(shù)據(jù)量大導(dǎo)致的圖表如熱力圖地理坐標(biāo)系或平行坐標(biāo)系上的大規(guī)模線圖或散點(diǎn)圖等,也利于實(shí)現(xiàn)某些視覺特效如交通圖。 一.簡介 echartsecharts是百度公司前端開發(fā)的一個(gè)圖表庫,2013年發(fā)布第一版,主要采用canvas畫圖,目前版本3.8.4;完全免費(fèi); highcharthighcharts是國外的一家公司...
閱讀 2657·2023-04-26 00:42
閱讀 2808·2021-09-24 10:34
閱讀 3820·2021-09-24 09:48
閱讀 4156·2021-09-03 10:28
閱讀 2579·2019-08-30 15:56
閱讀 2775·2019-08-30 15:55
閱讀 3264·2019-08-29 12:46
閱讀 2248·2019-08-28 17:52