赞
踩
热图是数据统计中经常使用的一种数据表示方法,它能够直观地反映数据特征,查看数据总体情况,在诸多领域具有广泛应用。
热图用以表示的是矩阵数据,例如相关阵、协差阵等方阵,也可以不是方阵。所以在处理数据前,我们需要将数据转成二维数组形式(二维列表、二维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()
利用上述代码即可绘制基础的热图。
(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。
兔兔以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()
与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()
(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:将数据设置为均值数据,调整生成图像颜色的整体深浅。
- 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()
'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',......
'Times New Roman','serif','fantasy','sans-serif','cursive','monospace',......
'normal','italic','oblique',......
'red','blue','green',......
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。