(6-2)绘制热力图

6.2  绘制热力图

热力图是指以特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域的图示。通过使用热力图,可以显示不可点击区域发生的事情。在本节的内容中,将详细讲解在Python程序中使用各种库绘制热力图的知识。

6.2.1  绘制热力图的函数

在Python程序中,通常使用库Seaborn中的内置函数heatmap()绘制热力图,此函数的语法原型如下所示。

seaborn.heatmap(data, vmin=None, vmax=None,cmap=None, center=None, robust=False, annot=None, fmt=’.2g’, annot_kws=None,linewidths=0, linecolor=’white’, cbar=True, cbar_kws=None, cbar_ax=None,square=False, xticklabels=’auto’, yticklabels=’auto’, mask=None, ax=None,**kwargs)

各类参数的具体说明如下:

(1)热力图输入数据参数

  1. data:是一个矩阵数据集,可以是numpy的数组(array),也可以是pandas的DataFrame。如果是DataFrame,则df的index/column信息会分别对应到heatmap的columns和rows,即df.index是热力图的行标,df.columns是热力图的列标。

(2)热力图矩阵块颜色参数

  1. vmax/vmin:分别是热力图的颜色取值最大和最小范围,默认是根据data数据表里的取值确定.
  2. cmap:从数字到色彩空间的映射,取值是matplotlib包里的colormap名称或颜色对象,或者表示颜色的列表;改参数默认值:根据center参数设定.
  3. center:数据表取值有差异时,设置热力图的色彩中心对齐值;通过设置center值,可以调整生成的图像颜色的整体深浅;设置center数据时,如果有数据溢出,则手动设置的vmax、vmin会自动改变.
  4. robust:默认取值False;如果是False,且没设定vmin和vmax的值,热力图的颜色映射范围根据具有鲁棒性的分位数设定,而不是用极值设定.

(3)热力图矩阵块注释参数

  1. annot(annotate的缩写) :默认取值False;如果是True则在热力图每个方格写入数据;如果是矩阵则在热力图中的每个方格写入该矩阵对应位置数据。
  2. fmt:字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位数字。
  3. annot_kws:默认取值False,如果是True,设置热力图矩阵上数字的大小颜色字体,matplotlib包text类下的字体设置。

(4)热力图矩阵块之间间隔及间隔线参数

  1. linewidths:定义热力图里“表示两两特征关系的矩阵小块”之间的间隔大小。
  2. linecolor:切分热力图上每个矩阵小块的线的颜色,默认值是white。

(5)热力图颜色刻度条参数:

  1. cbar:是否在热力图侧边绘制颜色刻度条,默认值是True。
  2. cbar_kws:热力图侧边绘制颜色刻度条时,相关字体设置,默认值是None。
  3. cbar_ax:热力图侧边绘制颜色刻度条时,刻度条位置设置,默认值是None。

(6)square:设置热力图矩阵小块形状,默认值是False。

(7)xticklabels/yticklabels:xticklabels:控制每列/每行标签名的输出。默认值是auto。如果是True,则以DataFrame的列名作为标签名。如果是False,则不添加行标签名。如果是列表则标签名改为列表中给的内容。如果是整数K则在图上每隔K个标签进行一次标注。如果是auto则自动选择标签的标注间距,将标签名不重叠的部分(或全部)输出

(8)mask:控制某个矩阵块是否显示出来,默认值是None。如果是布尔型的DataFrame,则将DataFrame里True的位置用白色覆盖掉。

(9)ax:设置作图的坐标轴,一般画多个子图时需要修改不同的子图的该值。

6.2.2  绘制一个简单地热力图

请看下面的实例文件re01.py,功能是使用库Seaborn绘制一个简单地热力图。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set()
np.random.seed(0)
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data)
plt.show()

执行效果如图6-9所示。

图6-9  执行效果

6.2.3  使用库Matplotlib绘制热力图

在Python程序中,也可以使用库Matplotlib绘制热力图。请看下面的实例文件re02.py,功能是使用库Matplotlib绘制一个热力图。

import numpy as np
import matplotlib.pyplot as plt

points = np.arange(-5,5,0.01)

x,y = np.meshgrid(points,points)
z = np.sqrt(x**2 + y**2)

cmaps = [plt.cm.jet, plt.cm.gray, plt.cm.cool, plt.cm.hot]

fig, axes = plt.subplots(2, 2)

for i, ax in enumerate(axes.ravel()):
    ax.imshow(z,cmap=cmaps[i])

plt.show()

执行效果如图6-10所示。

图6-10  执行效果

请看下面的实例文件re03.py,功能也是使用库Matplotlib绘制一个热力图。

import matplotlib.pyplot as plt
import matplotlib.cm as cm
from matplotlib.colors import LogNorm
import numpy as np
x, y = np.random.rand(10), np.random.rand(10)
z = (np.random.rand(9000000)+np.linspace(0,1, 9000000)).reshape(3000, 3000)
plt.imshow(z+10, extent=(np.amin(x), np.amax(x), np.amin(y), np.amax(y)),
    cmap=cm.hot, norm=LogNorm())
plt.colorbar()
plt.show()

执行效果如图6-11所示。

图6-11  执行效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农三叔

感谢鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值