Seaborn 图表分组

Seaborn 图表分组函数

在 Seaborn 中,我们可以使用 catplot() 函数来绘制一个分组型的图表。其中,catplot 是 “category plot(分类图表)” 的缩写。

语法:

sns.catplot(kind, col)

说明:

kind 是一个必选参数,用于定义图表的类型,它常用的取值如下表所示。

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()

运行之后,效果如下图所示。

Seaborn 不使用 catplot() 进行分组

分析:

在这个例子中,我们使用 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()

运行之后,效果如下图所示。

Seaborn 使用 catplot()

分析:

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 参数改为对应的值就可以了。小伙伴们可以自行试一下,非常的简单。

上一篇: Seaborn 子图

下一篇: Seaborn 调色板

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号