如何在Python中使用 seaborn 在热图单元格注释中添加文本?
先决条件: Seaborn 热图
热图被定义为数据的图形表示,使用颜色来可视化矩阵的值。在这种情况下,为了表示更常见的值或更高的活性,使用较亮的颜色,基本上使用红色,而为了表示不太常见或活性值,则优选较深的颜色。热图也由着色矩阵的名称定义。 Seaborn 中的热图可以使用 seaborn.heatmap()函数绘制。
Syntax: seaborn.heatmap(data, *, vmin=None, vmax=None, cmap=None, center=None, annot_kws=None, linewidths=0, linecolor=’white’, cbar=True, **kwargs)
Important Parameters:
- data: 2D dataset that can be coerced into an ndarray.
- vmin, vmax: Values to anchor the colormap, otherwise they are inferred from the data and other keyword arguments.
- cmap: The mapping from data values to color space.
- center: The value at which to center the colormap when plotting divergent data.
- annot: If True, write the data value in each cell.
- fmt: String formatting code to use when adding annotations.
- linewidths: Width of the lines that will divide each cell.
- linecolor: Color of the lines that will divide each cell.
- cbar: Whether to draw a colorbar.
All the parameters except data are optional.
Returns: An object of type matplotlib.axes._subplots.AxesSubplot
热图注释是在热图中显示有关行和列的附加信息的好方法。通常,为了在热图上显示数据值,我们将annot参数设置为True ,但如果您想将文本添加到单元格注释中,可以通过以下方式完成 -
方法一:
- 导入模块
- 创建数据或加载数据集
- 创建另一个类似数组的数据,其中包含要在热图上显示的文本值(与数据具有相同的形状)
- 将此类似数组的数据作为值提供给热图的 annot 参数。
- 如果要添加非数字值,则需要热图的fmt 参数。此参数用于添加字符串格式化代码以在添加注释时使用。
- 绘制热图
- 显示图
例子:
Python3
# importing libraries
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
# creating random data
data = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]])
# creating array of text
text = np.array([['A', 'B', 'C', 'D', 'E'], ['F', 'G', 'H', 'I', 'J'],
['K', 'L', 'M', 'N', 'O']])
# creating subplot
fig, ax = plt.subplots()
# drawing heatmap on current axes
ax = sns.heatmap(data, annot=text, fmt="")
Python3
# importing libraries
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
# creating random data
data = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]])
text = np.array([['A', 'B', 'C', 'D', 'E'],
['F', 'G', 'H', 'I', 'J'], ['K', 'L', 'M', 'N', 'O']])
# combining text with values
formatted_text = (np.asarray(["{0}\n{1:.2f}".format(
text, data) for text, data in zip(text.flatten(), data.flatten())])).reshape(3, 5)
# drawing heatmap
fig, ax = plt.subplots()
ax = sns.heatmap(data, annot=formatted_text, fmt="", cmap="cool")
输出 :
如果您想与数据值一起显示文本,您必须通过连接这两个值来创建自定义注释。
方法二:
- 导入模块
- 创建或加载数据
- 声明一个数据数组
- 使用 np.flatten() 将数据数组和文本数组重塑为一维。
- 然后将它们压缩在一起以遍历文本和值。
- 使用格式化的字符串创建自定义的新值。
- 返回包含自定义值的相同大小的重构数组。
- 创建热图
- 显示图
例子 :
蟒蛇3
# importing libraries
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
# creating random data
data = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10],
[11, 12, 13, 14, 15]])
text = np.array([['A', 'B', 'C', 'D', 'E'],
['F', 'G', 'H', 'I', 'J'], ['K', 'L', 'M', 'N', 'O']])
# combining text with values
formatted_text = (np.asarray(["{0}\n{1:.2f}".format(
text, data) for text, data in zip(text.flatten(), data.flatten())])).reshape(3, 5)
# drawing heatmap
fig, ax = plt.subplots()
ax = sns.heatmap(data, annot=formatted_text, fmt="", cmap="cool")
输出 :