30天ML计划|?机器学习?中Python实现可视化三维热力图(地形图)

由于项目的需要,一直苦于将多层数据集累加起来做成一个呈堆积状的三维图,有点类似于地形图(实则热力图),但又不是地形图。
30天ML计划|?机器学习?中Python实现可视化三维热力图(地形图)
文章图片

背景 先说说项目背景,本菜鸡是搞故障诊断的,所以免不了用上一些统计学的知识,看过之前我的Blog的都会发现, T 2 T^2 T2 和S P E SPE SPE 在故障诊断邻域或者说是再小范围一点,在过程监控邻域,是很好用且很关键的两个统计量,用于监测过程中的一些有故障的检测点或者区间,会有阈值限,超过阈值的则判断为故障,反而,则为正常。具体可以看->这里。
三维图 之前尝试过很多中方法来实现三维图,但是,。。。,但是均没实现完美的效果,如Echarts、Pyecharts、Plotly等等,最终还是只有用yyds,真的,没有它解决不了的可视化问题!!!
输入 明确一下我们的输入,简单来说,三维三维,不就是三个维度嘛。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的坐标位置给叠加起来,我们的输入如下。
30天ML计划|?机器学习?中Python实现可视化三维热力图(地形图)
文章图片

(数据就像上面那样,这里我们以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,这样调用起来更方便。
  1. 读取数据表
def loaddata(filename): """ 读取传入得数据表 """ dtf = pd.read_csv(filename)# 读取表格文件return dtf

  1. 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图显示

  1. 主函数
# 主函数 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=https://www.it610.com/article/t2, df_xy=xy)

最终的效果图像这样:
30天ML计划|?机器学习?中Python实现可视化三维热力图(地形图)
文章图片

换个方位再来一张:
30天ML计划|?机器学习?中Python实现可视化三维热力图(地形图)
文章图片

让我们再看看底部:
30天ML计划|?机器学习?中Python实现可视化三维热力图(地形图)
文章图片

深色的地方则是有多个相近的点堆积到一起的,所以会在那些点显得颜色很深。
来个大汇总,完整代码:
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=https://www.it610.com/article/t2, df_xy=xy)

?坚持读Paper,坚持做笔记,坚持学习?!!!
?To Be No.1
??
学习DeepLearning坚持!30天计划!!! 打卡 第 5 /30 Day!!!
?创作不易?,过路能?关注收藏点个赞?三连就最好不过了
?( ′???` )
?
【30天ML计划|?机器学习?中Python实现可视化三维热力图(地形图)】
愿我有生之年,得见您君临天下。

    推荐阅读