Seaborn 图表分组函数
在 Seaborn 中,我们可以使用 catplot() 函数来绘制一个分组型的图表。其中,catplot 是 “category plot(分类图表)” 的缩写。
语法:
sns.catplot(kind, col)说明:
kind 是一个必选参数,用于定义图表的类型,它常用的取值如下表所示。
| 取值 | 说明 |
|---|---|
| bar | 柱状图 |
| box | 箱线图 |
| violin | 小提琴图 |
| boxen | 增强箱线图 |
| strip | 分布散点图 |
| count | 计数图 |
| point | 点图 |
| swarm | 分簇散点图 |
col 是一个可选参数,它的值是一个列名,表示根据 DataFrame 中的哪一列进行分组。
Seaborn 图表分组示例
接下来,我们通过几个简单的例子来讲解一下 Seaborn 是如何对图表进行分组的。
示例 1:不使用 catplot() 进行分组
import matplotlib.pyplot as plt
import seaborn as sns
# 设置
sns.set_theme(rc={'font.sans-serif': 'SimHei', 'axes.unicode_minus': False})
# 加载内置数据集
df = sns.load_dataset('tips')
# 重命名列
column_map = {
'total_bill': '账单',
'tip': '小费',
'sex': '性别',
'smoker': '是否吸烟',
'day': '星期',
'time': '餐段',
'size': '人数'
}
df.rename(columns=column_map, inplace=True)
# 绘制图表
sns.barplot(data=df, x='星期', y='账单', hue='性别')
# 显示
plt.show()运行之后,效果如下图所示。

分析:
在这个例子中,我们使用 hue 参数来根据 “性别” 来添加一个区分。如果还希望根据 “餐段” 这一列来多添加一个区分,这时就无法使用 barplot() 函数来实现了。
示例 2:使用 catplot() 进行分组
import matplotlib.pyplot as plt
import seaborn as sns
# 设置
sns.set_theme(rc={'font.sans-serif': 'SimHei', 'axes.unicode_minus': False})
# 加载内置数据集
df = sns.load_dataset('tips')
# 重命名列
column_map = {
'total_bill': '账单',
'tip': '小费',
'sex': '性别',
'smoker': '是否吸烟',
'day': '星期',
'time': '餐段',
'size': '人数'
}
df.rename(columns=column_map, inplace=True)
# 绘制图表
sns.catplot(kind='bar', data=df, x='星期', y='账单', hue='性别', col='餐段')
# 显示
plt.show()运行之后,效果如下图所示。

分析:
col='餐段' 表示根据 “餐段” 来进行分组,这样就等于多增加了一个区分。如果使用 barplot() 函数,我们只能使用一种区分,而无法实现多种区分。
对于这个例子来说,如果我们把 col='餐段' 这个参数删除,此时的效果和上一个例子的效果是一样的。也就是说,下面 2 种方式可以说是等价的。
# 方式 1
sns.barplot(data=df, x='星期', y='账单', hue='性别')
# 方式 2
sns.catplot(kind='bar', data=df, x='星期', y='账单', hue='性别', col='餐段')实际上像箱线图、小提琴图等,同样也可以使用 catplot() 函数来实现,我们只需要将 kind 参数改为对应的值就可以了。小伙伴们可以自行试一下,非常的简单。
