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

2023-05-24 心梗后余生

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

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

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

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

OK,什么是热力图?

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

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

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


热力图的基本数据样式

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

热力图的使用建议

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

下面开始具体的*作案例

准备工作

## 初始字体设置,设置好可避免很多麻烦 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) # 设置为该路径为工作路径,一般存放数据源文件

设定图表样式和文件路径

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

读入数据

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

热力图的基本数据结构


热力图的基本颜色配色



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

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

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()

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

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

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()

相关矩阵(平方)

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

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()

半相关热图

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

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-MIN normalization_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()

无量纲化热力图

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

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-MIN normalization_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()

树形+热力图

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

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()

写在最后

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

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

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

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

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

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

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


相关股票:
相关概念:

崛起的中科系,被改变的我国芯片产业格局

当前,以芯片为代表的信创产业逐步成为国家科技竞争力的重要标志。在国产CPU产业强势崛起的过程中,你首先想到的会是哪几企业?答案有很多,但“中科系”的提及率绝对很高。作为国家战略科技力量,“中科系”旗下

芯片战场丨芯片领域三箭齐发 英特尔跑步突围

21世纪经济报道记者倪雨晴 圣何塞报道在硅谷源泉之一的圣何塞,英特尔CEO帕特·基辛格(Pat Gelsinger)正在带领英特尔加速奔跑。当地时间9月19日,2023英特尔on技术创新大会于美国加利

OPPO重启芯片业务?国产芯片或需告别“单打独斗”

财联社9月19日讯(记者 唐植潇)近日有消息称,OPPO将会重启芯片业务,并且“有部分员工已经回流,加入到了车载业务之中”。记者就此事向OPPO方面进行核实,对方表示“不予置评”。特百惠(我国)数字与

600亿颗芯片!我国巨头正式宣布,美媒:**也没料到制裁这么快

我国芯片市场与美国依赖我国的集成电路市场一直以来都是一个巨大的市场,拥有庞大的需求和巨大的增长潜力。我国的电子消费市场一直在迅速增长,包括智能手机、电视、电脑和各种智能设备等,这些设备都需要高性能的芯

最新手机芯片天梯图:A17、华为麒麟9000S,排在什么位置?

近日,最火的两颗芯片分别是苹果的3nm芯片A17 Pro,虽然很多人吐槽它较上一代提升不明显,但论性能,可以碾压任何安卓芯片,甚至是领先2代的。另外一款芯片,则是华为麒麟9000S,当然,这颗芯片工艺

韩国芯片连续13个月暴跌,尹锡悦指责我国不采购,外媒:自食其果

据韩国媒体称,韩国的半导体出口额已经连续暴跌13个月了,比去年同比下降了28%左右。韩国政府急的焦头烂额。尹锡悦政府竟直接甩锅我国,话里话外都是指责,他认为韩国半导体卖不出竟是我国的原因,我国应该帮助

我国突破芯片瓶颈将影响全球秩序?美国很担心,指出我国关键弱点

我国在芯片半导体领域一直深受美国的**,通过贸易制裁的方式阻止高端芯片进入我国市场。这样的举措一度造成我国芯片领域发展断档,不过随着我国科技企业近几年的突破,目前我国已经在芯片制造方面取得了重大的成果

没有他,我国芯片发展至少要**十年?

前几天,华为一声不响的上线了mate60系列,带着麒麟芯片9000s强势回归,吸引了全世界的目光。而华为麒麟芯片**背后,我们不该忘记这位老人—张汝京。我国半导体之父,为回**造芯片,被开除**户籍,

陈清泰:未来汽车颠覆传统,50%以上的零部件体系面临重构

【有车以后 资讯】“未来汽车对传统汽车的颠覆性,使传统零部件体系的50%以上都面临重构。”12月16日,在全球智能汽车产业峰会(GIV2022)上,我国电动汽车百人会理事长陈清泰指出,智能汽车的价值链

「姿势」一辆汽车由多少个零件组成?保证你说不清...

投稿点这里汽车有多少个零件?其实这个问题并没有一个十分确切的标准答案...据估计,一般轿车约由1万多个不可拆解的**零部件组装而成。结构极其复杂的特制汽车,如F1赛车等,其**零部件的数量可达到2万个

全球最大的10家汽车零部件供应商 都是世界500强 无我国企业

【卡车之家 原创】美国《财富》**每年发布的世界500强排行榜,是以营业收入数据对全球企业作出排名的榜单。2017年“世界500强”榜单中,汽车制造商和零部件厂商共占据33席(除去大型工程车辆企业),

汽车零部件企业哪家强?除了博世**还有这些名字你一定耳熟能详

文:懂车帝原创 李德喆[懂车帝原创 行业]9月18日,由《我国汽车报》主办,罗兰贝格协办的2019汽车零部件“双百强”企业发布会在江苏南京举行。在两份榜单中,博世、**、电装位列2019全球汽车零部件

汽车零部件行业现状及产业链

行业现状(Reference:产业运行 | 2021年汽车工业经济运行情况)中汽协预测:2022年我国汽车销量达到2700万辆,新能源销量超过550万辆(Reference:乘用车市场信息联席会)以乘

全球十大汽车零部件供应商,核心技术都被他们垄断,自主遗憾缺席

提到电影,我们会想到张艺谋、冯小刚,而很少会想到幕后的制作人;提起流行乐,我们会想到周杰伦、萧敬腾,而很少会想到背后的作词人。台前台后,一幕之别,知名度往往相差甚远。车界又何尝不是如此,知名车企我们都

高清汽车各零部件构造图,看完你就是汽车专家!

2023世界移动通信大会即将举行,大批中企强势回归!

来源:环球时报 【环球时报记者 倪浩 陶震 环球时报驻德国特约记者 青木】经过3年疫情后,全球最具影响力的通信展今年有望再现往日盛况。2月27日至3月2日,由全球移动通信**协会(GSMA)主办的20

太空新赛道:6G时代的卫星通信,究竟是什么?

近日华为、苹果争相推出手机卫星通信功能,成为一大亮点,不少手机厂商也将目光投到卫星通信。放眼未来,手机直连卫星的卫星通信服务将是大势所趋,也是6G时代的重要标志。华为以“北斗三号”为依托,率先把“卫星

光纤#光纤通信

国内企业在光通信产品的参数测试过程中,通常使用国外的先进测试设备。然而,这些测试仪器之间往往是孤立存在的,需要手动调试仪器并通过旋钮、按钮和人眼观察波形或数据。这不仅*作繁琐易出错,而且测试效率低下。

龙头20cm涨停,7天股价翻倍!一文看懂卫星通信前世今生及产业链

卫星通信概念股华力创通今日再度强势拉升,截至发稿,该股股价20cm涨停,7个交易日累计涨幅近113%,现报23.52元续刷阶段新高,总市值155.9亿元。消息上,有媒体从供应链获悉,Mate 60 P

工信部:目前我国尚不具备实现网络层面的移动通信号码归属地变更的条件

针对网友提出的“电话号码归属地更改”建议,工信部近日给出了官方回复。此前,有网友在人民网留言板向工信部留言称,“现在电话都是实名制,电话号绑定的***及一些主流的软件较多,更换号码后造成一系列问题

AD
更多相关文章