资讯专栏INFORMATION COLUMN

⚡机器学习⚡中Python实现可视化三维热力图(地形图)

Acceml / 3639人阅读

由于项目的需要,一直苦于将多层数据集累加起来做成一个呈堆积状的三维图,有点类似于地形图(实则热力图),但又不是地形图。


背景

先说说项目背景,本菜鸡是搞故障诊断的,所以免不了用上一些统计学的知识,看过之前我的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,这样调用起来更方便。

  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=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,坚持做笔记,坚持学习❤!!!
To Be No.1

⚡⚡

学习DeepLearning坚持!30天计划!!!

打卡5 /30 Day!!!


创作不易⚡,过路能❤关注收藏点个赞三连就最好不过了

ღ( ´・ᴗ・` )


愿我有生之年,得见您君临天下。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/120977.html

相关文章

  • 1个数据视化的「百搭套路」,从此打开新思路

    摘要:国产可视化库,应用广泛,免费,开源。下次面对数据分析任务,就可以参考可视化方法选型中的思路,根据你的需求,选择适当的图表进行可视化。 引言 针对不同的数据类型和数据...

    lx1036 评论0 收藏0
  • Python基于逻辑回归的糖尿病视网膜病变检测(数据集messidor_features.arff)

    摘要:一引言本项目基于逻辑回归理论,运用语言对数据集进行分析,实现对糖尿病视网膜病变的检测。可以确定这五个变量是导致糖尿病视网膜病变的主要因素。 一. 引言 本项目基于逻...

    Tangpj 评论0 收藏0
  • 你不知道的前端算法之力图实现

    摘要:目前支持散点围栏热力网格聚合等方式致力于让大数据可视化变得简单易用。如图表示,红色区域表示分析要素的密度大,而蓝色区域表示分析要素的密度小。实现热力原理读取每个像素的值透明度,做一个颜色映射。 本文作者:TalkingData 可视化工程师李凤禄编辑:Aresn 欢迎加入 QQ 群参与技术讨论:618308202 inMap 是一款基于 canvas 的大数据可视化库,专注于大数据方...

    zhaochunqi 评论0 收藏0
  • 数据视化之美 -- 以Matlab、Python为工具

    摘要:在我们科研工作中,将数据完美展现出来尤为重要。数据可视化是以数据为视角,探索世界。我们真正想要的是数据视觉,以数据为工具,以可视化为手段,目的是描述真实,探索世界。 ...

    why_rookie 评论0 收藏0
  • echarts 与 highcharts

    摘要:渲染能力采用渲染除了对使用,一般来说,更适合绘制图形元素数量非常大这一般是由数据量大导致的图表如热力图地理坐标系或平行坐标系上的大规模线图或散点图等,也利于实现某些视觉特效如交通图。 一.简介 echartsecharts是百度公司前端开发的一个图表库,2013年发布第一版,主要采用canvas画图,目前版本3.8.4;完全免费; highcharthighcharts是国外的一家公司...

    王笑朝 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<