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