以特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域的图示。热力图可以显示不可点击区域发生的事情。城市热力图该检测方式只提供参考。
你将发现访客经常会点击那些不是链接的地方,也许你应该在那个地方放置一个资源链接。比如:如果你发现人们总是在点击某个产品图片,你能想到的是,他们也许想看大图,或者是想了解该产品的更多信息。 同样,他们可能会错误地认为特别的图片就是导航链接。
------百度百科
热力图:关系型数据的可视化。
热力图:体现了两个离散变量之间的组合关系.
热力图:有时也称之为交叉填充表.
该图形最典型的用法就是实现列联表的可视化,即通过图形的方式展现两个离散变量之间的组合关系。
利用热力图可以看数据表里多个特征两两的相似度。
我们可以借助于seaborn模块中的heatmap函数,完成热力图的绘制。
首先对该函数的用法及参数含义做如下解释:
seaborn.heatmap(data, vmin=None, vmax=None, cmap=None, center=None, annot=None, fmt='.2g', annot_kws=None, linewidths=0, linecolor='white', cbar=True, cbar_kws = None, square=False, xticklabels='auto', yticklabels='auto', mask=None, ax=None)
data可以是numpy的数组(array),也可以是pandas的DataFrame。如果是DataFrame,则df的index/column信息会分别对应到heatmap的columns和rows,即df.index是热力图的行标,df.columns是热力图的列标
cmap:从数字到色彩空间的映射,取值是matplotlib包里的colormap名称或颜色对象,或者表示颜色的列表;改参数默认值:根据center参数设定
center:数据表取值有差异时,设置热力图的色彩中心对齐值;通过设置center值,可以调整生成的图像颜色的整体深浅;设置center数据时,如果有数据溢出,则手动设置的vmax、vmin会自动改变。
默认取值False;如果是True,在热力图每个方格写入数据;如果是矩阵,在热力图每个方格写入该矩阵对应位置数据
字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位数字
默认取值False;如果是True,设置热力图矩阵上数字的大小颜色字体,matplotlib包text类下的字体设置;
定义热力图里“表示两两特征关系的矩阵小块”之间的间隔大小
切分热力图上每个矩阵小块的线的颜色,默认值是’white’
是否在热力图侧边绘制颜色刻度条,默认值是True
square:设置热力图矩阵小块形状,默认值是False
热力图侧边绘制颜色刻度条时,相关字体设置,默认值是None
xticklabels控制每列标签名的输出;yticklabels控制每行标签名的输出。默认值是auto。如果是True,则以DataFrame的列名作为标签名。如果是False,则不添加行标签名。如果是列表,则标签名改为列表中给的内容。如果是整数K,则在图上每隔K个标签进行一次标注。 如果是auto,则自动选择标签的标注间距,将标签名不重叠的部分(或全部)输出
控制某个矩阵块是否显示出来。默认值是None。如果是布尔型的DataFrame,则将DataFrame里True的位置用白色覆盖掉
设置作图的坐标轴,一般画多个子图时需要修改不同的子图的该值
热力图矩阵块颜色参数
#cmap(颜色) import matplotlib.pyplot as plt import seaborn as sns % matplotlib inline f, (ax1,ax2) = plt.subplots(figsize = (6,4),nrows=2) # cmap用cubehelix map颜色 cmap = sns.cubehelix_palette(start = 1.5, rot = 3, gamma=0.8, as_cmap = True) pt = df.corr() # pt为数据框或者是协方差矩阵 sns.heatmap(pt, linewidths = 0.05, ax = ax1, vmax=900, vmin=0, cmap=cmap) ax1.set_title('cubehelix map') ax1.set_xlabel('') ax1.set_xticklabels([]) #设置x轴图例为空值 ax1.set_ylabel('kind') # cmap用matplotlib colormap sns.heatmap(pt, linewidths = 0.05, ax = ax2, vmax=900, vmin=0, cmap='rainbow') # rainbow为 matplotlib 的colormap名称 ax2.set_title('matplotlib colormap') ax2.set_xlabel('region') ax2.set_ylabel('kind')
#center的用法(颜色) f, (ax1,ax2) = plt.subplots(figsize = (6, 4),nrows=2) cmap = sns.cubehelix_palette(start = 1.5, rot = 3, gamma=0.8, as_cmap = True) sns.heatmap(pt, linewidths = 0.05, ax = ax1, cmap=cmap, center=None ) ax1.set_title('center=None') ax1.set_xlabel('') ax1.set_xticklabels([]) #设置x轴图例为空值 ax1.set_ylabel('kind') # 当center设置小于数据的均值时,生成的图片颜色要向0值代表的颜色一段偏移 sns.heatmap(pt, linewidths = 0.05, ax = ax2, cmap=cmap, center=200) ax2.set_title('center=3000') ax2.set_xlabel('region') ax2.set_ylabel('kind')
#cmap(颜色) import matplotlib.pyplot as plt import seaborn as sns import numpy as np import pandas as pd # % matplotlib inline # df = pd.DataFrame({'value1': np.random.randint(1, 100, 100), 'value2':np.random.randint(10000, 100000, 100)}) df = np.random.randint(1, 1000, (10, 10)) f, (ax1,ax2) = plt.subplots(figsize = (20,8),nrows=2) # cmap用cubehelix map颜色 cmap = sns.cubehelix_palette(start = 1.5, rot = 3, gamma=0.8, as_cmap = True) # pt = df.corr() # pt为数据框或者是协方差矩阵 pt = df sns.heatmap(pt, linewidths = 0.05, ax = ax1, vmax=900, vmin=0, cmap=cmap) ax1.set_title('cubehelix map') ax1.set_xlabel('') ax1.set_xticklabels([]) #设置x轴图例为空值 ax1.set_ylabel('kind') # cmap用matplotlib colormap sns.heatmap(pt, linewidths = 0.05, ax = ax2, vmax=900, vmin=0, cmap='rainbow') # rainbow为 matplotlib 的colormap名称 ax2.set_title('matplotlib colormap') ax2.set_xlabel('region') ax2.set_ylabel('kind') plt.show()
热力图矩阵块注释参数
#annot(矩阵上数字),annot_kws(矩阵上数字的大小颜色字体)matplotlib包text类下的字体设置 import numpy as np np.random.seed(20180316) x = np.random.randn(4, 4) f, (ax1, ax2) = plt.subplots(figsize=(20,8),nrows=2) # subplots:分割画布,nrows:分几行即几个画布,返回列表 sns.heatmap(x, annot=True, ax=ax1) sns.heatmap(x, annot=True, ax=ax2, annot_kws={'size':9,'weight':'bold', 'color':'blue'}) # Keyword arguments for ax.text when annot is True. http://stackoverflow.com/questions/35024475/seaborn-heatmap-key-words plt.show()
#fmt(字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位数字) import numpy as np np.random.seed(0) x = np.random.randn(4,4) f, (ax1, ax2) = plt.subplots(figsize=(20,8),nrows=2) sns.heatmap(x, annot=True, ax=ax1) sns.heatmap(x, annot=True, fmt='.1f', ax=ax2) plt.show()
热力图矩阵块之间间隔及间隔线参数
#linewidths(矩阵小块的间隔),linecolor(切分热力图矩阵小块的线的颜色) import matplotlib.pyplot as plt f, ax = plt.subplots(figsize = (20,8)) cmap = sns.cubehelix_palette(start = 1, rot = 3, gamma=0.8, as_cmap = True) sns.heatmap(pt, cmap = cmap, linewidths = 0.05, linecolor= 'red', ax = ax) ax.set_title('Amounts per kind and region') ax.set_xlabel('region') ax.set_ylabel('kind') plt.show()
#xticklabels,yticklabels横轴和纵轴的标签名输出 import matplotlib.pyplot as plt f, (ax1,ax2) = plt.subplots(figsize = (5,5),nrows=2) cmap = sns.cubehelix_palette(start = 1.5, rot = 3, gamma=0.8, as_cmap = True) p1 = sns.heatmap(pt, ax=ax1, cmap=cmap, center=None, xticklabels=False) ax1.set_title('xticklabels=None',fontsize=8) p2 = sns.heatmap(pt, ax=ax2, cmap=cmap, center=None, xticklabels=2, yticklabels=list(range(5))) ax2.set_title('xticklabels=2, yticklabels is a list',fontsize=8) ax2.set_xlabel('region')
#mask对某些矩阵块的显示进行覆盖 f, (ax1,ax2) = plt.subplots(figsize = (5,5),nrows=2) cmap = sns.cubehelix_palette(start = 1.5, rot = 3, gamma=0.8, as_cmap = True) p1 = sns.heatmap(pt, ax=ax1, cmap=cmap, xticklabels=False, mask=None) ax1.set_title('mask=None') ax1.set_ylabel('kind') p2 = sns.heatmap(pt, ax=ax2, cmap=cmap, xticklabels=True, mask=(pt<800)) #mask对pt进行布尔型转化,结果为True的位置用白色覆盖 ax2.set_title('mask: boolean DataFrame') ax2.set_xlabel('region') ax2.set_ylabel('kind')
用mask实现:突出显示某些数据
f,(ax1,ax2) = plt.subplots(figsize=(4,6),nrows=2) x = np.array([[1,2,3],[2,0,1],[-1,-2,0]]) sns.heatmap(x, annot=True, ax=ax1) sns.heatmap(x, mask=x < 1, ax=ax2, annot=True, annot_kws={"weight": "bold"}) #把小于1的区域覆盖掉
参考:【球迷福利】NBA球员数据分析
球员效率值相关分析中,在众多的数据中,有一项名为“RPM”
,标识球员的效率值,该数据反映球员在场时对球队比赛获胜的贡献大小,最能反映球员的综合实力。
我们来看一下它与其他数据的相关性:
data_cor = data.loc[:, ['RPM', 'AGE', 'SALARY_MILLIONS', 'ORB', 'DRB', 'TRB', 'AST', 'STL', 'BLK', 'TOV', 'PF', 'POINTS', 'GP', 'MPG', 'ORPM', 'DRPM']] data_cor.head()
获取两列数据之间的相关性
# 获取两列数据之间的相关性 corr = data_cor.corr() corr.head()
dat_cor = data.loc[:, ['RPM', 'AGE', 'SALARY_MILLIONS', 'ORB', 'DRB', 'TRB', 'AST', 'STL', 'BLK', 'TOV', 'PF', 'POINTS', 'GP', 'MPG', 'ORPM', 'DRPM']] coor = dat_cor.corr() sns.heatmap(coor, square=True, linewidths=0.02, annot=True) # annot-是否在热力图中显示数据 # seaborn中的heatmap函数,是将多维度数值变量按数值大小进行交叉热图展示。 plt.show()
由相关性分析的heatmap图可以看出,RPM值
与年龄
的相关性最弱,与“进攻效率值-ORPM
”、“场均得分-POINTS”、“场均抢断数-STL”
等比赛技术数据的相关性最强。
加油!
感谢!
努力!