IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> ?机器学习?中Python实现可视化三维热力图(地形图) -> 正文阅读

[人工智能]?机器学习?中Python实现可视化三维热力图(地形图)

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


背景

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


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

?( ′・?・` )

?


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

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-24 10:34:02  更:2021-09-24 10:34:04 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 12:49:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码