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

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

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

image.png

背景

先说说项目背景,本菜鸡是搞故障诊断的,所以免不了用上一些统计学的知识,看过之前我的Blog的都会发现,T 2 T^2T

2

 和 S P E SPESPE 在故障诊断邻域或者说是再小范围一点,在过程监控邻域,是很好用且很关键的两个统计量,用于监测过程中的一些有故障的检测点或者区间,会有阈值限,超过阈值的则判断为故障,反而,则为正常。具体可以看->这里。


三维图

之前尝试过很多中方法来实现三维图,但是,。。。,但是均没实现完美的效果,如Echarts、Pyecharts、Plotly等等,最终还是只有用yyds,真的,没有它解决不了的可视化问题!!!


输入

image.png

image.png

(数据就像上面那样,这里我们以 T 2

 的多层可视化为例展开吧)


那么下面我们直接开始搞可视化吧!!!


输出

输出最终则为我们的可视化三维图,先不爆料,看后续。


可视化

我们用的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

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)

最终的效果图像这样:

image.png

换个方位再来一张:

image.png

让我们再看看底部:

image.png

深色的地方则是有多个相近的点堆积到一起的,所以会在那些点显得颜色很深。

来个大汇总,完整代码

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)



相关文章
|
11天前
|
机器学习/深度学习 人工智能 算法
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
昆虫识别系统,使用Python作为主要开发语言。通过TensorFlow搭建ResNet50卷积神经网络算法(CNN)模型。通过对10种常见的昆虫图片数据集('蜜蜂', '甲虫', '蝴蝶', '蝉', '蜻蜓', '蚱蜢', '蛾', '蝎子', '蜗牛', '蜘蛛')进行训练,得到一个识别精度较高的H5格式模型文件,然后使用Django搭建Web网页端可视化操作界面,实现用户上传一张昆虫图片识别其名称。
144 7
【昆虫识别系统】图像识别Python+卷积神经网络算法+人工智能+深度学习+机器学习+TensorFlow+ResNet50
|
6天前
|
数据采集 JSON 数据可视化
【Python实战】Python对中国500强排行榜数据进行可视化分析
【Python实战】Python对中国500强排行榜数据进行可视化分析
|
9天前
|
机器学习/深度学习 算法 数据挖掘
Python机器学习10大经典算法的讲解和示例
为了展示10个经典的机器学习算法的最简例子,我将为每个算法编写一个小的示例代码。这些算法将包括线性回归、逻辑回归、K-最近邻(KNN)、支持向量机(SVM)、决策树、随机森林、朴素贝叶斯、K-均值聚类、主成分分析(PCA)、和梯度提升(Gradient Boosting)。我将使用常见的机器学习库,如 scikit-learn,numpy 和 pandas 来实现这些算法。
|
15天前
|
机器学习/深度学习 数据采集 算法
【机器学习】Scikit-Learn:Python机器学习的瑞士军刀
【机器学习】Scikit-Learn:Python机器学习的瑞士军刀
34 3
|
14天前
|
机器学习/深度学习 自然语言处理 数据可视化
文本挖掘与可视化:生成个性化词云的Python实践【7个案例】
词云(Word Cloud),又称为文字云或标签云,是一种用于文本数据可视化的技术,通过不同大小、颜色和字体展示文本中单词的出现频率或重要性。在词云中,更频繁出现的单词会显示得更大,反之则更小。
|
14天前
|
机器学习/深度学习 自然语言处理 数据可视化
文本挖掘与可视化:生成个性化词云的Python实践【7个案例】
词云是文本数据可视化的工具,显示单词频率,直观、美观,适用于快速展示文本关键信息。 - 用途包括关键词展示、数据探索、报告演示、情感分析和教育。 - 使用`wordcloud`和`matplotlib`库生成词云,`wordcloud`负责生成,`matplotlib`负责显示。 - 示例代码展示了从简单词云到基于蒙版、颜色和关键词权重的复杂词云生成。 - 案例覆盖了中文分词(使用`jieba`库)、自定义颜色和关键词权重的词云。 - 代码示例包括读取文本、分词、设置词云参数、显示和保存图像。
32 1
|
15天前
|
机器学习/深度学习 机器人 Python
实践指南,终于有大佬把Python和机器学习讲明白了!
机器学习正在迅速成为数据驱动型世界的一个必备模块。许多不同的领域,如机器人、医学、零售和出版等,都需要依赖这门技术。 机器学习是近年来渐趋热门的一个领域,同时 Python 语言经过一段时间的发展也已逐渐成为主流的编程语言之一。今天给小伙伴们分享的这份手册结合了机器学习和 Python 语言两个热门的领域,通过易于理解的项目详细讲述了如何构建真实的机器学习应用程序。
|
13天前
|
数据可视化
Seaborn 可视化(三)
Seaborn的pairplot用于多变量数据可视化,但上半部分与下半部分重复。可通过PairGrid手动定制,如示例所示,用regplot和kdeplot分别绘制对角线以上和以下的图,histplot画对角线。hue参数增强可视化,比如在violinplot和lmplot中按性别着色,展示不同类别。还能通过点的大小和形状(如markers参数)添加信息。Seaborn提供darkgrid等5种样式,用sns.set_style切换。
|
13天前
|
数据可视化 Python
Seaborn 可视化(二)
Seaborn教程展示了如何用`jointplot`创建蜂巢图,以及使用`matplotlib`的`hexbin`函数绘制2D核密度图。此外,它还介绍了2D核密度图,强调其在展示两个变量联合分布上的作用。条形图、箱线图和小提琴图也被讨论,其中箱线图揭示了数据的统计特性,而小提琴图结合了箱线图和核密度图的信息。`pairplot`函数用于可视化数据集中所有变量之间的两两关系。每种图表类型都配有示例图像。
|
13天前
|
数据可视化 数据挖掘 API
Seaborn 可视化(一)
Seaborn是Python的一个基于matplotlib的统计图形库,提供交互式界面,便于创建吸引人的统计图表。它与Pandas集成良好,支持直接使用DataFrame数据进行绘图。Seaborn能绘制直方图(distplot)、密度图(核密度估计)、条形图(计数图)以及散点图(regplot、lmplot、jointplot),适用于单变量和双变量数据分析,如展示分布、关系和趋势。例如,`sns.distplot()`用于直方图,`sns.lmplot()`和`sns.jointplot()`则用于绘制散点图并可添加回归线。