二维数据热力图的绘制

本文介绍了如何使用Excel和Origin软件绘制二维数据的热力图,以揭示不同变量间的影响规律。通过Power Query将XY数据转化为矩阵数据,然后对阴阳离子进行排序,利用VLOOKUP函数替换为序号,最终生成有序热力图,揭示离子液体粘度的规律。

前言

  • 对于二维数据的分析,热力图是一个比较好的手段,通过填充的颜色能直观看出不同变量对结果的影响规律。
    填色热力图
    上图是横坐标代表pH值,纵坐标代表温度,填色依据反应指数进行标定。
    通过上图我们能一眼看出pH值反应指数的影响比较显著,而温度几乎不产生影响。

  • 然而实际上,我们的横坐标或纵坐标不一定是数值类型变量,此时对横坐标的默认排序并不能有效表达出数据中蕴含的规律。
    比如对于离子液体1,研究阴离子和阳离子对粘度的影响,通常我们把阴阳离子分别设置为横纵坐标,根据离子液体的粘度值进行填色。

在这里插入图片描述
由于横纵坐标变成字符类型,而阴阳离子对粘度的影响我们事先也不知道,所以得到的填色图显得杂乱无章。
那么怎样得到整齐排布的热力图,并进一步分析阴阳离子对粘度的影响规律?

解决思路及步骤

需要的软件工具

数据分析软件(以Excel为例)
绘图软件(以origin为例)

具体步骤

  • 准备矩阵数据
    大部分时间我们生成的数据都是XXY数据,如下面表格所示:
阴离子阳离子粘度
anion1cation1n1
anion1cation2n2
anion2cation1n3
anion2cation2n4

而我们更希望获得的数据形式应该是矩阵的形式:

粘度cation1cation2
anion1n1n2
anion2n3n4

这个转化可以通过Excel的Power Query编辑器进行实现
在Excel的选项卡数据中选择从表格新建查询
调用Power Query
打开Power Query 编辑器后,选中需要进行透视2的列,在转换选项卡中点击透视列。
在这里插入图片描述
选择粘度作为值列,聚合函数选择不要聚合。
在这里插入图片描述
透视之后就能得到我们想要的矩阵数据。

在这里插入图片描述
在这里插入图片描述

  • 分别对阴离子和阳离子进行排序

根据上述步骤分别透视阴离子和阳离子,按照一定的规则对阴离子和阳离子进行排序,我这里采用的是平均数,即特定阴离子与所有阳离子结合对应的离子液体粘度平均值作为该阴离子的排序指标,对阳离子也采用同样的处理。

将阴阳离子排序编号填写在对应的阴阳离子后面,以备后用。

  • 通过VLOOKUP函数将列表中阴阳离子替换为序列号
VLOOKUP: 搜索表区域首列满足条件的元素,确定待检索单元格在区域中的行序号,再进一步返回选定单元格的值。默认情况下,表是以升序排序的。
VLOOKUP(lookup_value,table_array,col_index_num,[range_lookup])

lookup_value需要查询的单元格
table_array查询区域,保证想要查询的值在这一区域首列
col_index_num返回查询后对应的单元格的值
[range_lookup]布尔类型变量,false表示精确匹配,true表示近似匹配

在这里插入图片描述
具体调用如图所示。

  • 再次对数据进行透视,透视的对象为序号,而非阴阳离子名称,获得的二维数据为有序数据,进行绘制能够得到梯级的热力图。
    在这里插入图片描述
    从这张图可以看出比较明显的规律,阴离子和阳离子同时对离子液体粘度有影响。根据图中的颜色,我们也能大概知道哪几类阴离子和阳离子粘度较高,成功挖掘数据中的隐藏信息。

写在最后

这个方法绘制热力图可能稍显复杂,目前python和matlab都有比较好的方法完成这个任务。


  1. 通常由阴离子和阳离子两部分组成 ↩︎

  2. 在本文提及的数据中,透视某一列即意味着以这一列为表头创建矩阵 ↩︎

### 如何使用Python创建三维热力 为了实现三维热力,可以利用`matplotlib`库中的工具来完成可视化工作。下面提供一段完整的代码示例用于生成基于随机数据集的三维热力。 ```python import numpy as np from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt import seaborn as sns; sns.set() # For plot styling def generate_3d_heatmap(x, y, z): fig = plt.figure() ax = fig.add_subplot(111, projection='3d') # Create a mesh grid which matches the dimensions required by 'ax.plot_surface' xi, yi = np.meshgrid(range(len(y)), range(len(x))) # Plotting surface surf = ax.plot_surface(xi, yi, z, cmap=plt.cm.coolwarm, linewidth=0, antialiased=False) ax.set_xlabel('X axis') ax.set_ylabel('Y axis') ax.set_zlabel('Z value') # Add color bar indicating height values. fig.colorbar(surf, shrink=0.5, aspect=5) plt.show() # Example usage with random data points x = ['a', 'b', 'c'] y = ['A', 'B', 'C'] z = np.random.rand(3, 3) * 100 # Random Z-values between 0 and 100. generate_3d_heatmap(x, y, z) ``` 这段程序首先定义了一个名为`generate_3d_heatmap()`的功能函数,该函数接收三个参数——两个列表形式的一维坐标轴(即x和y),以及一个表示高度值或强度级别的二维数组z[^2]。通过调用此方法并传入适当的数据结构作为输入,即可得到一张直观展示变量间关系变化趋势的三维形。 值得注意的是,在实际应用中可能需要根据具体需求调整绘细节,比如改变颜色映射方案、设置不同的视角角度或是优化标签样式等。此外,还可以探索其他高级特性如动画效果或者交互功能以增强表的表现力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值