一、sns.heatmap参数
sns.heatmap是一个数据可视化函数,用于绘制矩阵数据的热图。它有很多参数可以用于调整图形样式和呈现方式。这里介绍几个常用的参数:
import seaborn as sns
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randn(10, 10))
sns.heatmap(df, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5)
1. data: 需要展示的数据,可以是DataFrame或numpy数组
2. cmap: 颜色映射表,设置热图的颜色主题。它可以是内置颜色映射表(如'coolwarm'、'viridis'、'mako'、'rocket'、'copper'等),也可以是自定义的颜色列表
3. annot: 是否显示每个单元格的数值
4. fmt: 数值格式,用于控制annot参数输出数值的格式
5. linewidths: 热图中每个矩形之间的间隔线宽度
二、sns.heatmap合并颜色带
热图中的颜色带用于表示数据值的大小,不同的颜色带代表不同的数据范围。有时候,可能需要将两个热图的颜色带合并为一个颜色带,以便进行比较。sns.heatmap提供了vmin和vmax参数,用于将不同数据范围内的颜色值映射到相同的颜色带上。
df1 = pd.DataFrame(np.random.randn(10, 10))
df2 = pd.DataFrame(np.random.randn(10, 10))
plt.figure(figsize=(8, 6))
plt.subplot(1, 2, 1)
sns.heatmap(df1, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5)
plt.subplot(1, 2, 2)
sns.heatmap(df2, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5, vmin=-1, vmax=1)
plt.show()
2个热图颜色带合并之前:
2个热图颜色带合并之后:
三、sns.heatmap函数
sns.heatmap函数可以接收一些关键字参数,用于控制热图的外观和响应式。例如,我们可以使用xticklabels和yticklabels参数来更改X和Y轴上的标签。
df = pd.DataFrame(np.random.randn(10, 10), columns=[f'col{i}' for i in range(10)],
index=[f'row{i}' for i in range(10)])
sns.heatmap(df, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5, xticklabels=[f'col{i}' for i in range(10)],
yticklabels=[f'row{i}' for i in range(10)])
plt.show()
热图外观控制示例图:
四、sns.heatmap作用
sns.heatmap函数主要用于可视化矩阵数据的热图,用不同的颜色表示数据的大小,颜色越亮则表示数据越大,颜色越暗则表示数据越小。
例如,设置颜色映射表为'coolwarm',则大于0的数值显示为红色,小于0的数值显示为蓝色,0的数值显示为中间的白色。
df = pd.DataFrame(np.random.randn(10, 10))
sns.heatmap(df, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5)
plt.show()
热图应用示例图:
五、sns.heatmap字体大小
sns.heatmap函数可以设置字体的大小,通过修改字体的大小,我们可以让热图更加美观,易于阅读。
df = pd.DataFrame(np.random.randn(10, 10))
sns.heatmap(df, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5, annot_kws={'size': 12})
plt.show()
热图字体大小示例图:
六、sns.heatmap中文列名
sns.heatmap函数默认使用英文字母作为列名,但是有时候我们需要使用中文作为列名,这时候需要更改列名并设置xticklabels参数。
df = pd.DataFrame(np.random.randn(10, 10), columns=[f'列{i}' for i in range(10)])
sns.heatmap(df, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5,
xticklabels=df.columns, yticklabels=[f'行{i}' for i in range(10)],)
plt.show()
热图中文列名示例图:
七、sns.heatmap中文标题
sns.heatmap函数可以设置热图的标题,根据热图的应用场景,设置对应的标题显得更为严谨。
df = pd.DataFrame(np.random.randn(10, 10), columns=[f'col{i}' for i in range(10)],
index=[f'row{i}' for i in range(10)])
plt.figure(figsize=(8, 6))
sns.heatmap(df, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5, xticklabels=[f'col{i}' for i in range(10)],
yticklabels=[f'row{i}' for i in range(10)])
plt.title('热图示例', fontsize=16)
plt.show()
热图中文标题示例图:
八、sns.heatmap共用颜色条
如果在同一画布上绘制多个热图,可能需要共用相同的颜色条。sns.heatmap函数提供了cbar参数来实现。
df1 = pd.DataFrame(np.random.randn(10, 10))
df2 = pd.DataFrame(np.random.randn(10, 10))
plt.figure(figsize=(8, 6))
plt.subplot(1, 2, 1)
sns.heatmap(df1, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5)
plt.subplot(1, 2, 2)
sns.heatmap(df2, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5, cbar=False)
plt.subplots_adjust(wspace=0.5)
plt.show()
多个热图共用颜色条示例图:
九、sns.heatmap标记目标值
我们可以使用mask参数来标记矩阵的某些区域。例如,标记所有小于0的值为红色,大于等于0的值为绿色。
df = pd.DataFrame(np.random.randn(10, 10))
mask = np.zeros_like(df)
mask[df < 0] = True
sns.heatmap(df, cmap='coolwarm', annot=True, fmt='.2f', linewidths=.5, mask=mask)
plt.show()
热图标记目标值示例图:
十、sns.heatmap cmap选取
cmap是sns.heatmap函数中的一个参数,用于指定颜色映射表。不同的颜色映射表可以反映不同的数据特征,选择合适的颜色映射表非常重要。matplotlib提供了一些内置的颜色映射表,包括'viridis'、'plasma'、'inferno'、'magma'等,可以根据数据特点来选取合适的颜色映射表。
df = pd.DataFrame(np.random.randn(10, 10))
plt.figure(figsize=(8, 6))
plt.subplot(2, 2, 1)
sns.heatmap(df, cmap='viridis', annot=True, fmt='.2f', linewidths=.5)
plt.subplot(2, 2, 2)
sns.heatmap(df, cmap='plasma', annot=True, fmt='.2f', linewidths=.5)
plt.subplot(2, 2, 3)
sns.heatmap(df, cmap='inferno', annot=True, fmt='.2f', linewidths=.5)
plt.subplot(2, 2, 4)
sns.heatmap(df, cmap='magma', annot=True, fmt='.2f', linewidths=.5)
plt.subplots_adjust(wspace=0.5, hspace=0.5)
plt.show()
不同颜色映射表的示例图: