Seaborn heatmap():创建热力图(非常详细,附带实例)
热力图主要通过颜色的深浅来展示数据的密集度和差异性。在 Seaborn 中可以使用 heatmap() 函数创建热力图。
分析下面的代码:

图 1 热力图
本例使用 NumPy 中的 arange() 函数创建一个包含 9 个整数的一维数组,然后使用 Ndarray 对象的 reshape() 方法,将其转换为 3 行 3 列的二维数组。
如需将左侧和底部的标签显示为指定的内容,可以将数组类型的数据创建为 DataFrame 类型,然后为其指定 index 参数和 columns 参数,以便定义 DataFrame 对象的行索引和列索引。
下面的代码将热力图左侧和底部的标签都显示为“小”、“中”、“大”:

图 2 自定义热力图的标签
分析下面的代码:

图 3 在热力图中显示数据
如需调整热力图色块上数据的字体大小,可以为 heatmap() 函数指定 annot_kws 参数,其值是一个包含文本格式的字典对象。
下面的代码将热力图色块上的数字的大小设置为50个像素:

图 4 调整数据的字体大小
下面的代码将热力图的颜色设置为灰度配色方案:

图 5 更改热力图的颜色
如需将最大值设置为最深的颜色,将最小值设置为最浅的颜色,可以将上面代码中的 plt.cm.gray 改为 plt.cm.Grays。
创建基本热力图
使用 heatmap() 函数创建热力图时,该函数的data参数的值必须是嵌套列表、二维数组或 DataFrame 对象。分析下面的代码:
import matplotlib.pyplot as plt import seaborn as sns import numpy as np data = np.arange(1, 10).reshape(3, 3) sns.heatmap(data) plt.show()将创建如下图所示的热力图:

图 1 热力图
本例使用 NumPy 中的 arange() 函数创建一个包含 9 个整数的一维数组,然后使用 Ndarray 对象的 reshape() 方法,将其转换为 3 行 3 列的二维数组。
如需将左侧和底部的标签显示为指定的内容,可以将数组类型的数据创建为 DataFrame 类型,然后为其指定 index 参数和 columns 参数,以便定义 DataFrame 对象的行索引和列索引。
下面的代码将热力图左侧和底部的标签都显示为“小”、“中”、“大”:
import matplotlib.pyplot as plt import seaborn as sns import pandas as pd import numpy as np # 设置 seaborn 全局字体为 SimSun(宋体) sns.set_style({'font.sans-serif': 'SimSun'}) # 生成 1~9 的数组并重塑为 3×3 arr = np.arange(1, 10).reshape(3, 3) # 定义行索引与列索引均为“小、中、大” index = list('小中大') columns = list('小中大') # 用 arr 构建 DataFrame data = pd.DataFrame(arr, index=index, columns=columns) # 绘制热力图,并在格子里标注数值 sns.heatmap(data, annot=True) # 显示图形 plt.show()如下图所示:

图 2 自定义热力图的标签
在热力图中显示数据
为 heatmap() 函数指定 annot 参数,并将其值设置为 True,将在热力图的每个色块上显示相应的数据。分析下面的代码:
import matplotlib.pyplot as plt import seaborn as sns import numpy as np # 生成 1~9 的数组并重塑为 3×3 data = np.arange(1, 10).reshape(3, 3) # 绘制热力图,并在格子里标注数值 sns.heatmap(data, annot=True) # 显示图形 plt.show()将创建下图所示的热力图。

图 3 在热力图中显示数据
如需调整热力图色块上数据的字体大小,可以为 heatmap() 函数指定 annot_kws 参数,其值是一个包含文本格式的字典对象。
下面的代码将热力图色块上的数字的大小设置为50个像素:
import matplotlib.pyplot as plt import seaborn as sns import pandas as pd import numpy as np # 设置 seaborn 全局字体为宋体(SimSun) sns.set_style({'font.sans-serif': 'SimSun'}) # 生成 1~9 的数组并重塑为 3×3 arr = np.arange(1, 10).reshape(3, 3) # 定义行索引与列索引均为“小、中、大” index = list('小中大') columns = list('小中大') # 用 arr 构建 DataFrame data = pd.DataFrame(arr, index=index, columns=columns) # 绘制热力图,标注数值,并设置字号为 50 sns.heatmap(data, annot=True, annot_kws={'fontsize': 50}) # 显示图形 plt.show()如下图所示:

图 4 调整数据的字体大小
更改热力图的颜色
如需更改热力图的颜色,可以为 heatmap() 函数指定 cmap 参数,并将其值设置为一个颜色映射选项。下面的代码将热力图的颜色设置为灰度配色方案:
import matplotlib.pyplot as plt import seaborn as sns import pandas as pd import numpy as np # 设置 seaborn 全局字体为宋体(SimSun) sns.set_style({'font.sans-serif': 'SimSun'}) # 生成 1~9 的数组并重塑为 3×3 arr = np.arange(1, 10).reshape(3, 3) # 定义行索引与列索引均为“小、中、大” index = list('小中大') columns = list('小中大') # 用 arr 构建 DataFrame data = pd.DataFrame(arr, index=index, columns=columns) # 绘制热力图:标注数值,字号设为 50,并使用灰度色图 sns.heatmap(data, annot=True, annot_kws={'fontsize': 50}, cmap=plt.cm.gray) # 显示图形 plt.show()如下图所示:

图 5 更改热力图的颜色
如需将最大值设置为最深的颜色,将最小值设置为最浅的颜色,可以将上面代码中的 plt.cm.gray 改为 plt.cm.Grays。