首页 > 编程笔记 > Python笔记 阅读:112

Seaborn heatmap():创建热力图(非常详细,附带实例)

热力图主要通过颜色的深浅来展示数据的密集度和差异性。在 Seaborn 中可以使用 heatmap() 函数创建热力图。

创建基本热力图

使用 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。

相关文章