热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

matplotlib热力图_还在一味追求看似漂亮,实则无用的热力图吗?Python可视化系列...

最初看到热力图时,你是不是会从内心发出惊呼,看着特别有感觉?那老海就问第二个问题了,然后你还能看出什么来?颜色
4026b0270ed90a9b77976a48774d47a4.png

最初看到热力图时,你是不是会从内心发出惊呼,看着特别有感觉?

那老海就问第二个问题了,然后你还能看出什么来?

颜色有深有浅?还有什么?能看出哪个区域大吗?到底又大多少?

哈哈,这种感觉就是热力图的特点:如同蒙面美人的图表类型!

OK,什么是热力图?

热力图 (Heat Map),“热力图” 一词最初是由软件设计师提出并创造的,专门用来描述实时金融市场信息的图表类型。注意是软件设计师提出的,不是视觉设计师,更不是数据分析师!

正因如此,就如同南丁格尔玫瑰图一样,都是特殊出身,因此用途局限性非常大

最早的热力图,都是在矩形色块加上颜色变换。而当今我们说的大多是经过平滑模糊的热力图谱,这样的热力图更容易让人们理解和解读。

热力图的基本数据样式

不同的特征字段,在不同的数值上的统计情况,统计分布不同则颜色也变化。

0a39ddc9eb7474ea32bc268f313b305b.png

热力图的使用建议
  1. 热力图在绘图前尽量统一数据量纲、或者进行归一化标准化处理
  2. 热力图的主要应用在整体全局的数据呈现,不适合局部精准数据展示
  3. 热力图的颜色带来强烈的视觉冲击力,数据准确度上较弱,很难来分辨具体大小
  4. 热力图常用来用表达分布,所以一般情况用彩虹色系(rainbow)来传达这个分布变化
  5. 热力图背景常常是图片或地图,因此不需要必须有坐标轴。

下面开始具体的操作案例

准备工作
c33557ea57523c0c2a35c4e8bac7c624.png

## 初始字体设置,设置好可避免很多麻烦plt.rcParams['font.sans-serif']=['Source Han Sans CN'] # 显示中文不乱码,思源黑体 plt.rcParams['font.size'] = 22 # 设置图表全局字体大小,后期某个元素的字体大小可以自行调整plt.rcParams['axes.unicode_minus'] = False # 显示负数不乱码## 初始化图表大小plt.rcParams['figure.figsize'] = (20.0, 8.0) # 设置figure_size尺寸## 初始化图表分辨率质量plt.rcParams['savefig.dpi'] = 300 # 设置图表保存时的像素分辨率plt.rcParams['figure.dpi'] = 300 # 设置图表绘制时的像素分辨率## 图表的颜色自定义colors = ['#dc2624', '#2b4750', '#45a0a2', '#e87a59', '#7dcaa9', '#649E7D', '#dc8018', '#C89F91', '#6c6d6c', '#4f6268', '#c7cccf']plt.rcParams['axes.prop_cycle'] = plt.cycler( color=colors)path = 'D:系列文章'# 自定义文件路径,可以自行设定os.chdir(path)# 设置为该路径为工作路径,一般存放数据源文件

设定图表样式和文件路径
d47fc7d8a4566c1e4b7069976244af23.png

Financial_data = pd.read_excel('虚拟演示案例数据.xlsx',sheet_name='二维表')Financial_data

读入数据
63781874ba4a4ddd4e6e4e1f081d7663.png

Financial_data = pd.read_excel('虚拟演示案例数据.xlsx',sheet_name='二维表')Financial_data

热力图的基本数据结构
06d89f2dd450f7292272c1348288d2f9.png

热力图的基本颜色配色
d14fd29bd229407f8315e7d6d3c86371.png

各个数值在不同特征下的热力情况

最基本的热力图原理,方便我们理解热力这个概念是什么

333418743737a1822f1458eb87051da5.png

plt.rcParams['figure.figsize'] = (10, 10) # 设置figure_size尺寸plt.rcParams['font.size'] = 10 # 设置图表全局字体大小,后期某个元素的字体大小可以自行调整# Financial_data = Financial_data.drop('分类',axis=1)targetlist = Financial_data.columns[1:] # 选择需要的字段heatdata = round(Financial_data.loc[:,targetlist]/1000) # 为了展示方便,数据统一除以1000,并取四舍五入取整数# 利用sns.heatmap来画热图sns.heatmap(heatdata, # 设置数据源 cmap='Greens', # 设置热图配色 annot=True, # 开启设置显示数字,默认不显示 annot_kws={"size":8}, # 设置显示数字的大小 vmax=10, # 设置显示范围最大值 vmin=0, # 设置显示范围最小值 center=5, # 设置颜色显示中心的数值,来控制 yticklabels=True, # 设置Y轴标签是否显示 xticklabels=True, # 设置X轴标签是否显示,默认为显示# xticklabels=4, # 可以设置显示哪些标签或者隐藏部分标签,避免图像混乱 cbar=True, # 设置颜色栏是否显示,默认为显示 linewidths=2, # 格子之间的间隔距离 linecolor='white') # 格子之间的间隔颜色sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

e1975c15168a2df32c63991c857c8979.png

设定分组对象在不同特征下的热力情况

可自定义我们需要参考的对比对象

baba613ff69a43af0b5ecbf0538ed230.png

plt.rcParams['figure.figsize'] = (10, 10) # 设置figure_size尺寸plt.rcParams['font.size'] = 10 # 设置图表全局字体大小,后期某个元素的字体大小可以自行调整# Financial_data = Financial_data.drop('分类',axis=1)# targetlist = Financial_data.columns[:] # 选择需要的字段heatdata = Financial_data.set_index('门店城市',drop=True) # 设置参考对象列作为index索引# corr_matrix=heatdata.corr()# 利用sns.heatmap来画热图sns.heatmap(heatdata, # 设置数据源 cmap='Greens', # 设置热图配色 annot=True, # 设置显示数字 vmax=10, # 设置显示范围最大值 vmin=0, # 设置显示范围最小值 center=5, # 设置颜色显示中心的数值,来控制 linewidths=2) # 格子之间的间隔距离sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

37d3068fceb3108ecb2e97d502b4b737.png

相关矩阵(平方)

除了查看统计分布,还可以查看不同变量之间的相关性,常用在特征选择上

104e5529ddd66bb92315c6a86de40891.png

plt.rcParams['figure.figsize'] = (10, 10) # 设置figure_size尺寸plt.rcParams['font.size'] = 10 # 设置图表全局字体大小,后期某个元素的字体大小可以自行调整# Financial_data = Financial_data.drop('分类',axis=1)targetlist = Financial_data.columns[1:] # 选择需要的字段heatdata = round(Financial_data.loc[:,targetlist]/1000) # 为了展示方便,数据统一除以1000,并取四舍五入取整数corr_matrix=heatdata.corr()# 利用sns.heatmap来画热图sns.heatmap(corr_matrix, # 设置数据源 cmap='Greens', # 设置热图配色 annot=True, # 设置显示数字 vmax=1, # 设置显示范围最大值 vmin=0, # 设置显示范围最小值 center=5, # 设置颜色显示中心的数值,来控制 linewidths=2) # 格子之间的间隔距离sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

b64b397902a407d1e90b5f597100988b.png

半相关热图

这是相关矩阵热力图的简化版,因为对角矩阵的一半元素都是相同的,所以可以简化

4ec8a1786f6cde72c69cbaba34953c30.png

plt.rcParams['figure.figsize'] = (10, 10) # 设置figure_size尺寸plt.rcParams['font.size'] = 10 # 设置图表全局字体大小,后期某个元素的字体大小可以自行调整# Financial_data = Financial_data.drop('分类',axis=1)targetlist = Financial_data.columns[1:] # 选择需要的字段heatdata = round(Financial_data.loc[:,targetlist]/1000) # 为了展示方便,数据统一除以1000,并取四舍五入取整数# 极值化MAX-MINnormalization_matrix=(heatdata-heatdata.min())/heatdata.max()# 正则化normalization_matrix=(heatdata-heatdata.mean())/heatdata.std()# 利用sns.heatmap来画热图sns.heatmap(normalization_matrix, # 设置数据源 cmap='Greens', # 设置热图配色 annot=True, # 设置显示数字 vmax=1, # 设置显示范围最大值 vmin=0, # 设置显示范围最小值 center=5, # 设置颜色显示中心的数值,来控制 linewidths=2) # 格子之间的间隔距离sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

d684b83d532e8d6a731fc30522445ede.png

无量纲化热力图

有时数据的量纲规模变化很大,此时建议统一数据量纲,效果会好些

91446c975061b9f9b4755dc4e67d5ea9.png

plt.rcParams['figure.figsize'] = (10, 10) # 设置figure_size尺寸plt.rcParams['font.size'] = 10 # 设置图表全局字体大小,后期某个元素的字体大小可以自行调整# Financial_data = Financial_data.drop('分类',axis=1)targetlist = Financial_data.columns[1:] # 选择需要的字段heatdata = round(Financial_data.loc[:,targetlist]/1000) # 为了展示方便,数据统一除以1000,并取四舍五入取整数# 极值化MAX-MINnormalization_matrix=(heatdata-heatdata.min())/heatdata.max()# 正则化normalization_matrix=(heatdata-heatdata.mean())/heatdata.std()# 利用sns.heatmap来画热图sns.heatmap(normalization_matrix, # 设置数据源 cmap='Greens', # 设置热图配色 annot=True, # 设置显示数字 vmax=1, # 设置显示范围最大值 vmin=0, # 设置显示范围最小值 center=5, # 设置颜色显示中心的数值,来控制 linewidths=2) # 格子之间的间隔距离sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

树形+热力图

这是混合图表应用,用途特别有些,有时候数据图表都堆在一起,看着就乱,不推荐

c94b74c301ef1cdd3f7dcbfb2e7eb768.png

plt.rcParams['figure.figsize'] = (10, 10) # 设置figure_size尺寸plt.rcParams['font.size'] = 10 # 设置图表全局字体大小,后期某个元素的字体大小可以自行调整heatdata = Financial_data.set_index('门店城市',drop=True) # 设置参考对象列作为index索引# # 利用sns.heatmap来画热图# sns.heatmap(heatdata, # 设置数据源# cmap='Greens', # 设置热图配色# annot=True, # 设置显示数字# vmax=1, # 设置显示范围最大值# vmin=0, # 设置显示范围最小值# center=5, # 设置颜色显示中心的数值,来控制# linewidths=2) # 格子之间的间隔距离# 距离相似性的设置sns.clustermap(heatdata.iloc[:20,:], metric="correlation", # 距离相似性,设置为相似性:"correlation",欧氏距离:"euclidean" method="single", # 聚类的方法,设置为最近点算法:"single",方差最小化算法:"Ward" cmap="Blues", # 设置热图配色 standard_scale=1, # 归一化设置,还可设置z_score=1的方法 robust=True, # 离群值检验,默认为不开启,这里设置开启离群值研究# row_colors=row_colors )sns.despine() # 默认无参数状态,就是删除上方和右方的边框,matplotlib貌似做不到plt.show()

d3ad910ee4e6450bf231cf9531de2be7.png

写在最后

上一篇介绍气泡图,而热力图给人的视觉冲击力更强,当然也就变得更不精准

我们使用图表的目标不同,选择图表时就得非常注意,

热力图我一般是不会选择的,商业分析一般要求务必表达精准,所以它不适合

更多的时候是在做机器学习的特征选择时,会探索一下变量间的相关性如何。

OK,今天先到这里了,老海日常随笔总结,码字不易,初心不改!

如果觉得喜欢,请动动小手关注和转发,鼓励一下我们。

我是老海,来自数据炼金术师



推荐阅读
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 手把手教你使用GraphPad Prism和Excel绘制回归分析结果的森林图
    本文介绍了使用GraphPad Prism和Excel绘制回归分析结果的森林图的方法。通过展示森林图,可以更加直观地将回归分析结果可视化。GraphPad Prism是一款专门为医学专业人士设计的绘图软件,同时也兼顾统计分析的功能,操作便捷,可以帮助科研人员轻松绘制出高质量的专业图形。文章以一篇发表在JACC杂志上的研究为例,利用其中的多因素回归分析结果来绘制森林图。通过本文的指导,读者可以学会如何使用GraphPad Prism和Excel绘制回归分析结果的森林图。 ... [详细]
  • SLAM优秀开源工程最全汇总
    https:zhuanlan.zhihu.comp145750808 1、CartographerCartographer是一个系统,可跨多个平台和传感器配置以2D和3D形式提供实 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • OpenMap教程4 – 图层概述
    本文介绍了OpenMap教程4中关于地图图层的内容,包括将ShapeLayer添加到MapBean中的方法,OpenMap支持的图层类型以及使用BufferedLayer创建图像的MapBean。此外,还介绍了Layer背景标志的作用和OMGraphicHandlerLayer的基础层类。 ... [详细]
  • cs231n Lecture 3 线性分类笔记(一)
    内容列表线性分类器简介线性评分函数阐明线性分类器损失函数多类SVMSoftmax分类器SVM和Softmax的比较基于Web的可交互线性分类器原型小结注:中文翻译 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • 人脸检测 pyqt+opencv+dlib
    一、实验目标绘制PyQT界面,调用摄像头显示人脸信息。在界面中,用户通过点击不同的按键可以实现多种功能:打开和关闭摄像头, ... [详细]
  • 推荐 :以数据驱动的方式讲故事
    直觉vs数据首先,你有思考过一个问题吗?当你的直觉与你所掌握的数据矛盾的时候,你是听从于直觉还是相信你所掌握的数据呢?201 ... [详细]
  • 本文介绍了贝叶斯垃圾邮件分类的机器学习代码,代码来源于https://www.cnblogs.com/huangyc/p/10327209.html,并对代码进行了简介。朴素贝叶斯分类器训练函数包括求p(Ci)和基于词汇表的p(w|Ci)。 ... [详细]
  • 建立分类感知器二元模型对样本数据进行分类
    本文介绍了建立分类感知器二元模型对样本数据进行分类的方法。通过建立线性模型,使用最小二乘、Logistic回归等方法进行建模,考虑到可能性的大小等因素。通过极大似然估计求得分类器的参数,使用牛顿-拉菲森迭代方法求解方程组。同时介绍了梯度上升算法和牛顿迭代的收敛速度比较。最后给出了公式法和logistic regression的实现示例。 ... [详细]
  • Annotation的大材小用
    为什么80%的码农都做不了架构师?最近在开发一些通用的excel数据导入的功能,由于涉及到导入的模块很多,所以开发了一个比较通用的e ... [详细]
  • VBA操作Excel之设置单元格属性
    VBA操作Excel简介一、VBA读写Excel文件二、VBA设置单元格属性三、VBA弹出输入和输出窗口参考文档一、VBA读写Excel文件VBA简介及打开Excel文件方法见VB ... [详细]
  • 开发笔记:共享单车数据分析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了共享单车数据分析相关的知识,希望对你有一定的参考价值。共享单车数据分析和共享单车用户行为分析PPT从数据分 ... [详细]
author-avatar
lc蓝晨
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有