创建热图
要在 Python 中创建热图,我们可以使用 seaborn 库。
seaborn 库建立在 Matplotlib 之上。
Seaborn 库提供了一个高级数据可视化界面,我们可以其中绘制我们的矩阵。
要安装 seaborn,请按如下方式运行 pip 命令:
pip install seaborn
Seaborn 支持以下绘图:
- 分布图
- 矩阵图
- 回归图
- 时间序列图
- 分类图
现在让我们创建一个热图:
导入以下必需的模块:
import numpy as np import seaborn as sb import matplotlib.pyplot as plt
我们导入了 numpy 模块以生成给定范围之间的随机数数组,将其绘制为热图。
data = np.random.rand(4, 6)
这将创建一个四行六列的二维数组。
现在让我们将这些数组值存储在热图中。
我们可以通过使用 seaborn 模块的热图功能来创建热图。
然后我们将按如下方式传递数据:
heat_map = sb.heatmap(data)
使用 matplotlib,我们将在输出中显示热图:
plt.show()
Seaborn 热图颜色条
热图中的颜色条如下所示:
热图的属性cbar是一个布尔属性;它告诉它是否应该出现在情节中。
如果未定义 cbar 属性,则默认情况下将在绘图中显示颜色条。
要移除颜色条,请将 cbar 设置为 False:
>>> heat_map = sb.heatmap(data, annot=True, cbar=False) >>> plt.show()
要添加颜色列标题,我们可以使用 cbar_kws 属性。
代码如下所示:
>>> heat_map = sb.heatmap(data, annot=True, cbar_kws={'label': 'My Colorbar'}) >>> plt.show()
在 cbar_kws 中,我们必须指定我们所指的颜色条的哪个属性。
在我们的示例中,我们指的是颜色条的标签(标题)。
同样,我们可以改变颜色的方向。
默认方向是垂直的,如上例所示。
要创建水平颜色条,请按如下方式定义 cbar_kws 的方向属性:
>>> heat_map = sb.heatmap(data, annot=True, cbar_kws={'label': 'My Colorbar', 'orientation': 'horizontal'}) >>> plt.show()
删除热图 y 刻度标签
Seaborn 默认为 y 轴添加标签。
要删除它们,我们可以将 yticklabels 设置为 false。
heat_map = sb.heatmap(data, yticklabels=False)
什么是热图?
热图是一种以二维形式表示数据的方式。
数据值在图表中用颜色表示。
热图的目标是提供信息的彩色视觉摘要。
更改热图颜色条字体大小
如果我们需要改变seaborn所有组件的字体大小,可以使用Seaborn的font_scale属性。
让我们将比例设置为 1.8,并将比例 1 与 1.8 进行比较:
>>> sb.set(font_scale=1.8) >>> heat_map = sb.heatmap(data, annot=True, cbar_kws={'label': 'My Colorbar', 'orientation': 'horizontal'}) >>> plt.show()
在热图上添加文本和值
在前面的部分中,我们只在热图上添加了值。
在本节中,我们将在热图上随文本一起添加值。
示例:
创建随机测试数据:
>>> data = np.random.rand(4, 6)
现在为我们将写在热图上的文本创建一个数组:
>>> text = np.asarray([['a', 'b', 'c', 'd', 'e', 'f'], ['g', 'h', 'i', 'j', 'k', 'l'], ['m', 'n', 'o', 'p', 'q', 'r'], ['s', 't', 'u', 'v', 'w', 'x']])
现在我们必须将文本与值结合起来,并将结果作为标签添加到热图上:
>>> labels = (np.asarray(["{0}\n{1:.2f}".format(text,data) for text, data in zip(text.flatten(), data.flatten())])).reshape(4,6)
好的,所以在这里我们传递了文本数组和数据数组中的数据,然后将两个数组展平为更简单的文本并将它们压缩在一起。
然后将结果重新整形以创建另一个相同大小的数组,该数组现在包含文本和数据。
新数组存储在称为标签的变量中。
标签变量将使用 annot 添加到热图中:
>>> heat_map = sb.heatmap(data, annot=labels, fmt='')
添加除 True 和 False 以外的注释时,应添加 fmt 属性。
更改热图颜色
我们可以使用热图的 cmap 属性使用颜色图来更改 seaborn 热图的颜色。
考虑下面的代码:
>>> heat_map = sb.heatmap(data, cmap="YlGnBu") >>> plt.show()
这里cmap等于YlGnBu,代表如下颜色:
在 Seaborn 热图中,我们有三种不同类型的颜色图。
- 顺序色图
- 发散的调色板
- 离散数据
顺序色图
当数据范围从低值到高值时,我们可以使用顺序颜色图。
顺序颜色图颜色代码可与 heatmap() 函数或者 kdeplot() 函数一起使用。
顺序Cubic体螺旋调色板
Cubic体螺旋是顺序颜色图的一种形式。
当亮度线性增加和色调略有差异时,我们可以使用它。
我们可以使用 cmap 属性在代码中实现此调色板:
>>> heat_map = sb.heatmap(data, cmap="cubehelix")
发散的调色板
当高值和低值在热图中很重要时,我们可以使用发散调色板。
发散调色板在两种 HUSL 颜色之间创建一个调色板。
这意味着发散调色板在图形中包含两种不同的阴影。
我们可以在 seaborn 中创建发散调色板,如下所示:
import seaborn as sb import matplotlib.pyplot as plt >>> sb.palplot(sb.diverging_palette(200, 100, n=11)) >>> plt.show()
这里 200 是左侧调色板的值,100 是右侧调色板的代码。
变量 n 定义块的数量。
在我们的例子中,它是 11.
离散数据
在 Seaborn 中,有一个名为 mpl_palette 的内置函数,它返回离散的颜色模式。
mpl_palette 方法将在调色板中绘制值。
这个调色板是一个水平数组。
可以使用以下代码行实现:
>>> sb.palplot(sb.mpl_palette("Set3", 11)) >>> plt.show()
参数 Set3 是调色板的名称,11 是调色板中离散颜色的数量。
seaborn 的 palplot 方法在给定调色板的水平数组中绘制值。
在热图上添加文本
要在热图上添加文本,我们可以使用 annot 属性。
如果 annot 设置为 True,则文本将写入每个单元格。
如果定义了每个单元格的标签,我们可以将标签分配给 annot 属性。
考虑以下代码:
>>> data = np.random.rand(4, 6) >>> heat_map = sb.heatmap(data, annot=True) >>> plt.show()
我们可以自定义 annot 值。
设置热图 y 轴标签
我们可以使用 Matplotlib 的 ylabel 属性在 y 轴上添加标签,如下所示:
>>> data = np.random.rand(4, 6) >>> heat_map = sb.heatmap(data) >>> plt.ylabel('Values on Y axis')
删除热图 x 刻度标签
热图中每个块的 x 轴和 y 轴上的值称为刻度标签。
Seaborn 默认添加刻度标签。
如果我们想删除刻度标签,我们可以将 seaborn 热图的 xticklabel 或者 ytickelabel 属性设置为 False,如下所示:
heat_map = sb.heatmap(data, xticklabels=False, yticklabels=False)
在本教程中,我们将使用名为 seaborn 的 Python 库以热图形式表示数据。
该库用于基于 Matplotlib 可视化数据。
调整热图字体大小
我们可以通过使用 seaborn 的 font_scale 属性来调整热图文本的字体大小,如下所示:
>>> sb.set(font_scale=2)
现在定义并显示热图:
>>> heat_map = sb.heatmap(data, annot=True) >>> plt.show()
更改刻度轴的旋转
我们可以通过使用所需 ytick 或者 xtick 标签的旋转属性来更改刻度标签旋转。
首先,我们像这样定义热图:
>>> heat_map = sb.heatmap(data) >>> plt.show()
这是一个带有随机数据的常规图,如前一节中所定义。
要旋转它们,我们将首先获取热图的 yticklabels,然后将旋转设置为 0:
>>> heat_map.set_yticklabels(heat_map.get_yticklabels(), rotation=0)
在 set_yticklabels 中,我们传递了两个参数。
第一个获取热图的 yticklabels,第二个设置旋转。
上面这行代码的结果如下:
旋转属性可以是任意角度:
>>> heat_map.set_yticklabels(heat_map.get_yticklabels(), rotation=35)
设置热图 x 轴标签
我们可以使用 Matplotlib 的 xlabel 属性在 x 轴上添加标签,如下代码所示:
>>> plt.xlabel("Values on X axis")