📜  如何在Python中使用 seaborn 在热图单元格注释中添加文本?

📅  最后修改于: 2022-05-13 01:55:40.451000             🧑  作者: Mango

如何在Python中使用 seaborn 在热图单元格注释中添加文本?

先决条件: Seaborn 热图

图被定义为数据的图形表示,使用颜色来可视化矩阵的值。在这种情况下,为了表示更常见的值或更高的活性,使用较亮的颜色,基本上使用红色,而为了表示不太常见或活性值,则优选较深的颜色。热图也由着色矩阵的名称定义。 Seaborn 中的热图可以使用 seaborn.heatmap()函数绘制。

热图注释是在热图中显示有关行和列的附加信息的好方法。通常,为了在热图上显示数据值,我们将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")

输出 :