热图(Heatmap)绘制(matplotlib与seaborn)

article/2025/10/30 23:31:01

热图是数据统计中经常使用的一种数据表示方法,它能够直观地反映数据特征,查看数据总体情况,在诸多领域具有广泛应用。

一:matplotlib绘制方法

1.基础绘制

热图用以表示的是矩阵数据,例如相关阵、协差阵等方阵,也可以不是方阵。所以在处理数据前,我们需要将数据转成二维数组形式(二维列表、二维np.array、np.mat、pd.DataFrame等都可以)。

import matplotlib.pyplot as plt
import numpy as np
data=[[1,0.5,0.7],[0.1,0.2,0.3]]
plt.imshow(data)
plt.show()

利用上述代码即可绘制基础的热图。

2.细节补充

(1)标题:plt.title('标题名',loc=,fontdict=fontdict,rotation=,x=,y=),绘制标题。

loc:'left'、'center'、'right',表示标题位置,默认为'center'。

fontdict:设置字体,详见(7)。

rotation:标题逆时针旋转角度,默认为0。

x,y:用于进一步控制标题在画布中的位置。

(2)x轴、y轴坐标

2.1:plt.xticks()与plt.yticks()。用于xy坐标的绘制,如标签位置、颜色等。

plt.xticks(ticks=,labels['label1','label2','label3'],color='red',rotation=45,veritalalignment=,horizontalalignment=,family=,style=,weight=,bbox=)

ticks:x轴各个标签位置,[0,1,2,...]。

labels:各个标签文本,['label1',label2'...]。

color:字体颜色。

rotation:字逆时针旋转角度。

verticalalignment:'center','top','bottom','baseline',标签垂直对齐方式。

horizontalalignment:'center','right','left,标签水平对齐方式。(这两种对齐方式可以使图更加整洁,避免标签参差不齐)。

family:设置字体。

style:字体风格。

weight:字体粗细。

bbox:字体边框,如{'facecolor':'red','alpha':0.5}。

2.2:plt.tick_params(axis=,which=,width=,length=,color=,direction=,bottom=,top=,left=,right=,pad=,labelsize=,lanbelbottom=,labeltop=,labelleft=,labelright=)。修改

axis:'x'、'y'、'both',表示设置哪一坐标轴,默认both。

which:'major'、'minor'、'both',代表设置主刻度线、副刻度线和同时设置,默认为:'major'。

width,length:刻度线长度与宽度。

color:刻度线颜色。

direction:'in'、'out’、'inout',表示刻度线在绘图区内、外或同时显示。

bottom,top,left,right:True、False,表示绘图区4个边框线上刻度线是否显示。默认bottom,left为True,其余False。

pad:刻度线与标签之间距离。(可用于防止标签与绘图区重叠)

labelsize:标签字体大小。

labelcolor:标签字体颜色(同2.1中参数color,若2.1中设置color,此处不必设置)。

labelbottom,labeltop,labelleft,labelright:True、False,表示绘图区4个边框上标签是否显示。

(3)数值与颜色对应规则(热图标尺):plt.colorbar(pad=,location='',orientation=,ticks=,extend=,shrink=,label='标题',format=)

pad:标尺与图之间距离。

location:'left','right','bottom','top',标尺的位置。

orientation:'horizontal','vertical',标尺方向。

ticks:列表,如[0,1,2,3..],显示列表中的刻度。

extend:'max','min','both',展示标尺尖角。

shrink:值为0~1,标尺长度。

label:给标尺一个标签。

format:标尺上刻度格式,如’%.2f'表示保留两位小数。

(4)色块数值显示:plt.text()。由于该函数只能逐个色块添数值标签,所以需要用循环嵌套方法实现。

for i in range(2):for j in range(3):plt.text(j,i,data[i,j],ha='center',va='center',ha='center',color='white')

在plt.text()中,第一个参数表示x坐标,第二个表示y坐标,第三个为数值标签,ha表示标签水平位置,可以为'left'、'center'、'right',va表示竖直方向位置,可以为 'top'、 'bottom'、'center'、 'baseline',、center_baseline'。va、ha默认为'center'。color:字体颜色。

(5)热图样式:plt.imshow(data,cmap='coolwarm',origin='upper',aspect='auto')

cmap:表示热图颜色风格,其样式众多,详解附录。

origin:热图(0,0)点位置,可以为‘upper'、’lower'。

aspect:图像长宽比,可以为int或float等数值,auto表示自动匹配。

(6)x轴、y轴标题:plt.xlabel('x title',fontdict=fontdict,rotation=0,loc='center',x=0,y=0)与plt.ylabel('y title',fontdict=fontdict,rotation=0,loc='center',x=0,y=1)

fontdict:设置字体,详解(7)。

rotation:标题旋转。

loc表示标题的位置,xlabel中loc为'left'、'center'、'right',ylable中:'bottom'、'center'、'top'。

x,y可以进一步控制标题的位置。

(7)标题字体设置:font={style:'  ',family:'  ',weight:",size: ,color:'  '}

style:字体风格

family:字体样式。

weight:字体粗细,可以为数,也可以用'bond'表示粗体。

size:字体大小。

color:字体颜色。

设置好font后,将其传递给plt.title()、plt.xlabel()等函数中的参数fontdict即可。

(8)画布规格:plt.figure(figsize=,dip=)与plt.gcf().subplots_adjust(left=,right=,bottom=,top=)

figsize:画布大小,(x,y)。

dip:图片放大后失真度,一般为300~400。

left,right,bottom,top:画布边界,避免部分图像无法在画布中显示。left,bottom为下界,一般在0附近,right,top为上界,一般接近1。

3.举例

兔兔以dry bean dataset 数据集为例,作相关阵热图。

data=pd.DataFrame(pd.read_csv('Dry_Bean_Dataset.csv')) #获取数据
data=data.corr() #计算相关阵
labelx=data.columns #变量名
labely=data.columns
n=len(labelx) #变量个数
titlefont={'style':None,'family':'fantasy','weight':1,'size':15,'color':'black'} #设置标题字体
labelfont={'style':None,'family':None,'weight':None,'size':12,'color':'red'} #xy标题字体
plt.figure(figsize=(6,6),dpi=100) #图像大小
plt.gcf().subplots_adjust(left=0.25,right=0.95,bottom=0.19,top=0.8) #设置图像边界
plt.imshow(data,cmap='rainbow',origin='lower',aspect=1) #热图样式plt.title('Dry Bean Dataset correlation',fontdict=titlefont,loc='center',y=1.11,rotation=0) #标题
plt.xlabel('$Dry \ bean \ variate$',fontdict=labelfont,loc='center',rotation=0)
plt.ylabel('$Dry \ bean \ variate$',fontdict=labelfont,loc='center',rotation=90)plt.xticks(ticks=np.arange(n),labels=labelx,rotation=45,color='green',horizontalalignment='right')
plt.yticks(ticks=np.arange(n),labels=labely,rotation=0,color='blue',verticalalignment='bottom')
plt.tick_params(axis='both',which='minor',width=2,length=3,color='blue',pad=20,labelsize=9,direction='out')
plt.colorbar(pad=0.09,orientation='vertical',ticks=None,label=None,extend='max',shrink=0.8,location='right') #热力标尺
plt.tight_layout()
plt.show()

二:seaborn绘制方法

1.基础绘制

与matplotlib相比,seaborn绘制热图简便许多,很多在matplotlib中逐步实现的过程在seaborn中可以直接实现,但是有些功能也需要借助matplotlib,所以实际应用时可以将二者结合起来。

import seaborn as sns
import matplotlib.pyplot as plt
data=[[1,2,3],[4,5,6]]
sns.heatmap(data)
plt.show()

2.细节补充

(1)sns.heatmap(data=,cmap=,annot=,cbar=,fmt=,linewidth=,linecolor=,xlabelticks=,ylabelticks=,vmax=,vmin=,annot_kws=cbar_kws=,mask=,center= )

cmap:热图颜色风格,与matplotlib中cmap相同,详解附录。

annot:True,False,是否显示数值注释,默认为False。

cbar:True,False 是否显示标尺,默认为True。

linewidth:每个小方格之间的间距。

linecolor:分割线的颜色。

xlabelticks,ylabelticks:热图标签,['label1',label2',....],若data为pd.DataFrame且设置好columns与index,则直接显示标签,可以不用此参数。

vmax,vmin:标尺中最大值与最小值显示值。

annot_kws:{'color':'  ','size':  ,'family':'  ','style':'  ','weight':  ,......},单元格数值标签属性。与matplotlib中字体设置的各个参数、值是一致的,这里以字典形式输入。

cbar_kws:{'orientation':'  ','shrink': '  ' ,'extend:'  ','location':'  ',......}标尺设置。与matplotlib中colorcar()中的各个参数、值是一致的,在这里以字典的形式输入。

mask:True,False,或布尔矩阵mask(与热图数据维数相同,值为Ture,False或0,1等数字的二维数组)。默认为False,Ture则不显示数据。对于矩阵mask,若对应位置为False,则显示该数据。

center:将数据设置为均值数据,调整生成图像颜色的整体深浅。

3.举例

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
data=pd.DataFrame(pd.read_csv('Dry_Bean_Dataset.csv'))
data=data.corr()
plt.title('Dry bean dataset',rotation=0)
mask=np.ones((16,16))
for i in range(16):for j in range(i+1):mask[i,j]=0
sns.heatmap(data=data,cmap='YlGnBu',annot=True,linewidth=0.9,linecolor='white',cbar=True,vmax=None,vmin=None,center=0,square=True,mask=mask,robust=True,annot_kws={'color':'white','size':1,'family':None,'style':None,'weight':10},cbar_kws={'orientation':'vertical','shrink':1,'extend':'max','location':'right'})
plt.show()

 

 

附录:

1.cmap参数值(热图颜色风格)

'Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 'BrBG_r', 'BuGn', 'BuGn_r', 'BuPu', 'BuPu_r', 'CMRmap','CMRmap_r', 'Dark2', 'Dark2_r', 'GnBu', 'GnBu_r', 'Greens', 'Greens_r', 'Greys', 'Greys_r', 'OrRd', 'OrRd_r', 'Oranges', 'Oranges_r','PRGn', 'PRGn_r', 'Paired', 'Paired_r', 'Pastel1', 'Pastel1_r', 'Pastel2', 'Pastel2_r', 'PiYG', 'PiYG_r', 'PuBu', 'PuBuGn', 'PuBuGn_r','PuBu_r', 'PuOr', 'PuOr_r', 'PuRd', 'PuRd_r', 'Purples', 'Purples_r', 'RdBu', 'RdBu_r', 'RdGy', 'RdGy_r', 'RdPu', 'RdPu_r','RdYlBu', 'RdYlBu_r', 'RdYlGn', 'RdYlGn_r', 'Reds', 'Reds_r', 'Set1', 'Set1_r', 'Set2', 'Set2_r', 'Set3', 'Set3_r', 'Spectral','Spectral_r', 'Wistia', 'Wistia_r', 'YlGn', 'YlGnBu', 'YlGnBu_r', 'YlGn_r', 'YlOrBr', 'YlOrBr_r', 'YlOrRd', 'YlOrRd_r', 'afmhot','afmhot_r', 'autumn', 'autumn_r', 'binary', 'binary_r', 'bone', 'bone_r', 'brg', 'brg_r', 'bwr', 'bwr_r', 'cividis', 'cividis_r','cool', 'cool_r', 'coolwarm', 'coolwarm_r', 'copper', 'copper_r', 'cubehelix', 'cubehelix_r', 'flag', 'flag_r', 'gist_earth', 'gist_earth_r','gist_gray', 'gist_gray_r', 'gist_heat', 'gist_heat_r', 'gist_ncar', 'gist_ncar_r', 'gist_rainbow', 'gist_rainbow_r', 'gist_stern','gist_stern_r', 'gist_yarg', 'gist_yarg_r', 'gnuplot', 'gnuplot2', 'gnuplot2_r', 'gnuplot_r', 'gray', 'gray_r', 'hot','hot_r', 'hsv', 'hsv_r', 'inferno', 'inferno_r', 'jet', 'jet_r', 'magma', 'magma_r', 'nipy_spectral', 'nipy_spectral_r', 'ocean','ocean_r', 'pink', 'pink_r', 'plasma', 'plasma_r', 'prism', 'prism_r', 'rainbow', 'rainbow_r', 'seismic', 'seismic_r', 'spring', 'spring_r', 'summer', 'summer_r', 'tab10', 'tab10_r', 'tab20', 'tab20_r', 'tab20b', 'tab20b_r', 'tab20c', 'tab20c_r', 'terrain', 'terrain_r', 'turbo', 'turbo_r', 'twilight', 'twilight_r', 'twilight_shifted','twilight_shifted_r', 'viridis', 'viridis_r', 'winter', 'winter_r',......

2.字体family

'Times New Roman','serif','fantasy','sans-serif','cursive','monospace',......

3.字体style

'normal','italic','oblique',......

4.color

'red','blue','green',......


http://chatgpt.dhexx.cn/article/C3oASYGH.shtml

相关文章

‘0’ 和 '\0'

48是0对应的ascii值。

KEIL/MDK编译优化optimization选项注意事项

KEIL编译器C语言编译选项优化等级说明 -Onum Specifies the level of optimization to be used when compiling source files. Syntax -Onum Where num is one of the following: 0 Minimum optimization. Turns off most optimizations. When debugging is enabled, this opt…

0,'\0','0'

#include <iostream> using namespace std; int main(void) { cout<<__FILE__<<\t<<__LINE__<<endl;cout<<"内 容:\t"<<"0"<<\t<<"\\\0\"<<\t<<"\0\"<<…

Odoo

狭路相逢 勇者胜 Odoo 是用于经营公司的最好的管理软件。 数百万用户使用我们的集成应用可以更好地开展工作 现在开始。免费的。 重新定义可扩展性 一个需求&#xff0c;一个应用程式。整合从来没有那么顺畅 促进销售量 客户关系管理POS销售 整合您的服务 项目工时表帮助…

0 、 '0' 、 0 、 ’\0’ 区别

转载自&#xff1a;https://blog.csdn.net/qnavy123/article/details/93901631 ① ‘0’ 代表 字符0 &#xff0c;对应ASCII码值为 0x30 (也就是十进制 48) ② ‘\0’ 代表 空字符(转义字符)【输出为空】 &#xff0c;对应ASCII码值为 0x00(也就是十进制 0)&#xff0c; …

Linux的内核编译用O0是编译不过的

最近在ATF的升级过程中遇到了一个编译问题&#xff0c;最后是通过编译优化解决的&#xff0c;然后一百度这个优化全是在Linux中的。于是就借着Linux编译优化来学学。 内容来自 宋宝华老师&#xff1a; 关于Linux编译优化几个必须掌握的姿势 1、编译选项和内核编译 首先我们都…

alert uuid does not exits. Dropping to a shell!

ALERT&#xff01;UUID does not exit. Dropping to a shell&#xff01; 服务器系统ubuntu16.04server&#xff0c;非自然断电后开机进入initramfs模式&#xff0c;服务器磁盘阵列是raid1和raid5。初步分析是硬盘坏道或掉盘&#xff0c;进入raid卡里看到硬盘一切正常&#xf…

跟着团子学SAP PS:如何查询PS模块中的user exits以及相关BAdIs SE80/SMOD/CNEX006/CNEX007/CNEX008

在PS很多标准字段或功能无法满足客户需求的时候往往需要通过SAP标准的user exits或者BAdI进行开发以满足业务需要&#xff0c;所以今天介绍下如何查询PS模块中的用户出口以及BAdIs&#xff1a; &#xff08;1&#xff09;查询PS模块中的user exits: 执行SE80&#xff0c;在菜…

EXT

ext的核心是store&#xff0c;存储数据用的。调试时可以先把store这块先屏蔽掉&#xff0c;先看页面的&#xff0c;页面出来了再调试store。这样会调试起来很快。 init: function () { var view this.getView(), // var store Global.getStore(app.store.L…

IDEA|class path resource XXX cannot be opened because it does not exits

IDEA|class path resource XXX cannot be opened because it does not exits 问题截图&#xff1a; 原因&#xff1a;没有设置好各个文件夹。我的理解是&#xff0c;当把文件夹设置好具体的功能才能被IDEA自动识别。 解决方法&#xff1a; 转发链接&#xff1a;https://bl…

User Exits和Customer Exits

一、Extension of SAP functionality SAP makes different possibilities available to extend SAP functionality in the R/3 without modifying the delivered R/3-Standard. Thus these extensions are further present also after a R/3-Release-Wechsel. User exit Fi…

sql查询中使用in和exits比较和区别

首先&#xff0c;查询中涉及到的两个表&#xff0c;一个user和一个order表&#xff0c;具体表的内容如下&#xff1a; user表&#xff1a; order表&#xff1a; in 确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候&#xff0c;首先查询子查询的表&#xff0c;然后…

SQL语句中exits和in的区别

一 表展示 查询中涉及到的两个表&#xff0c;一个user和一个order表&#xff0c;具体表的内容如下&#xff1a; user表&#xff1a; order表&#xff1a; 二 in 演示 确定给定的值是否与子查询或列表中的值相匹配。in在查询的时候&#xff0c;首先查询子查询的表&#xff0c…

E. Exits in Excess

题意&#xff1a; 移除最多一半的边使得图没有环。 将所有边分成两部分&#xff0c; 第一部分为 u < v u < v u<v&#xff0c; 第二部分为 v > u v > u v>u&#xff0c; 将小的边集合删去即可。 AC代码&#xff1a; int n, m; vector<int> v1, v2…

20220621 Dual Quaternion

文章目录 对偶数一、对偶数是什么&#xff1f;二、对偶矢量三、对偶四元数 对偶数 一、对偶数是什么&#xff1f; https://zhuanlan.zhihu.com/p/358146509 对偶数是一种特殊的自洽的运算&#xff0c;类似于常用的复数基本单位 i i i &#xff08; i 2 − 1 i^2-1 i2−1&a…

Quaternion

01:欧拉角 1.欧拉角Vector3(x,y,z)代表的是旋转物体&#xff08;若是标准旋转那么是旋转坐标轴x,y,z&#xff0c;转换为旋转物体则旋转角度取反顺序不变&#xff09;&#xff0c;且是将物体从物体坐标系旋转到惯性坐标系&#xff08;世界坐标系中为了渲染&#xff09;&#x…

Quaternion.Euler调整记录

Quaternion.Euler调整 1.运行unity 调整摄像头视角&#xff0c;找到需要的位置&#xff0c;记录下 摄像头的位置和旋转角度。 2.调整空物体的位置 使之位置与需要的位置一致 3.调整Quaternion.Euler 使Quaternion.Euler与旋转数值一致。

Quaternion(四元数)和旋转以及Yaw, pitch, roll 的含义

原文&#xff1a; http://www.linuxgraphics.cn/graphics/opengl_quaternion.html Quaternion(四元数)和旋转 本文介绍了四元数以及如何在OpenGL中使用四元数表示旋转。 Quaternion 的定义 四元数一般定义如下&#xff1a; qwxiyjzk其中 w,x,y,z是实数。同时&#xff0c;有…

Unity3d开发之对Quaternion的使用

上周找到了新公司。这周二来上班。可怕的是我刚去的第二天下午四点领导通知我做一个VRdemo&#xff0c;要求第二天交。我勒个擦。我现在对设备还没熟悉呢。连sdk都没下载而且距离上一次开发vr是在快两年之前了。属实让我措手不及。没错&#xff0c;按剧本走&#xff0c;加班到凌…

【Unity编程】四元数(Quaternion)与欧拉角

欧拉旋转、四元数、矩阵旋转之间的差异 除了欧拉旋转以外&#xff0c;还有两种表示旋转的方式&#xff1a;矩阵旋转和四元数旋转。接下来我们比较它们的优缺点。 欧拉角 优点&#xff1a;三个角度组成&#xff0c;直观&#xff0c;容易理解。优点&#xff1a;可以进行从一个方…