由于專案的需要,一直苦于將多層資料集累加起來做成一個呈堆積狀的三維圖,有點類似于地形圖(實則熱力圖),但又不是地形圖,
背景
先說說專案背景,本菜雞是搞故障診斷的,所以免不了用上一些統計學的知識,看過之前我的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
雖然我們的代碼不是很長,但為了代碼的規范和美觀,建議還是講其封裝為一個一個的function,這樣呼叫起來更方便,
- 讀取資料表
def loaddata(filename):
"""
讀取傳入得資料表
"""
dtf = pd.read_csv(filename) # 讀取表格檔案
return dtf
- T 2 T^2 T2 三維熱力圖
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 plt
import pandas as pd
from mpl_toolkits.mplot3d import Axes3D
from 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,堅持做筆記,堅持學習?!!!
?To Be No.1??哈哈哈哈
學習DeepLearning堅持!30天計劃!!!
打卡 第 5 /30 Day!!!
?創作不易?,過路能?關注、收藏、點個贊?三連就最好不過了
?( ′・?・` )
?
『
愿我有生之年,得見您君臨天下,
』
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/302433.html
標籤:AI
