创建热图

要在 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)
Python 数据可视化

在本教程中,我们将使用名为 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")
日期:2020-07-15 11:16:24 来源:oir作者:oir