Seaborn 双变量图

从之前的学习可以知道,Seaborn 散点图 主要用于判断两个变量直接是否存在关联趋势。实际上散点图只能查看两个变量之间的关系,但有时我们还希望同时查看变量自身数据分布的情况,又应该怎么做呢?此时我们可以借助双变量图来实现。

Seaborn 双变量图函数

在 Seaborn 中,我们可以使用 jointplot() 函数来绘制一个双变量图。双变量图也叫做 “双变量关系图”,它会在中间处绘制一个散点图来表示两个变量的关系,并且在边缘处分别绘制一个描述变量自身数据分布的直方图。

语法:

sns.jointplot(data, x, y)

说明:

data 用于定义数据部分,它是一个 DataFrame。x 用于指定 DataFrame 的哪一列作为 x 轴坐标,y 用于指定 DataFrame 的哪一列作为 y 轴坐标。

Seaborn 双变量图案例

Seaborn 内置了一个数据集 penguins,该数据集保存的是 344 只企鹅的相关数据,包括种类、岛屿、性别、体重等,部分内容如下图所示。需要注意的是,penguins 数据中存在一定的缺失值,不过这并不会影响我们绘制图表。

Seaborn penguins 数据集

示例 1:Seaborn 绘制双变量图

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('penguins')
# 重命名列
column_map = {
    'species': '种类',
    'island': '岛屿',
    'bill_length_mm': '喙长',
    'bill_depth_mm': '喙深',
    'flipper_length_mm': '鳍长',
    'body_mass_g': '体重',
    'sex': '性别'
}
df.rename(columns=column_map, inplace=True)

# 绘制图表
sns.jointplot(data=df, x='喙长', y='喙深')

# 显示
plt.show()

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

Seaborn 双变量图

分析:

从结果可以看出来,jointplot() 会在中央部分绘制两个变量的散点图,并且在边缘部分绘制单个变量的直方图。

示例 2:添加区分

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('penguins')
# 重命名列
column_map = {
    'species': '种类',
    'island': '岛屿',
    'bill_length_mm': '喙长',
    'bill_depth_mm': '喙深',
    'flipper_length_mm': '鳍长',
    'body_mass_g': '体重',
    'sex': '性别'
}
df.rename(columns=column_map, inplace=True)

# 绘制图表
sns.jointplot(data=df, x='喙长', y='喙深', hue='性别')

# 显示
plt.show()

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

Seaborn 双变量图添加区分

分析:

hue='性别' 表示根据 “性别” 来进行区分。需要注意的是,此时对于单个变量的数据分布情况,使用的是 “Seaborn 核密度图” 来表示,而不是使用 “Seaborn 直方图” 来表示。

示例 3:图表类型

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('penguins')
# 重命名列
column_map = {
    'species': '种类',
    'island': '岛屿',
    'bill_length_mm': '喙长',
    'bill_depth_mm': '喙深',
    'flipper_length_mm': '鳍长',
    'body_mass_g': '体重',
    'sex': '性别'
}
df.rename(columns=column_map, inplace=True)

# 绘制图表
sns.jointplot(data=df, x='喙长', y='喙深', kind='reg')

# 显示
plt.show()

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

Seaborn 双变量图 kind='reg'

分析:

默认情况下,双变量图中央部分是使用散点图来表示的。如果想要改变该图表类型,我们可以使用 kind 这个参数来实现。其中,参数 kind 的取值如下表所示。

参数 kind 的取值
取值 说明
scatter(默认值) 散点图
reg 回归图
hist 直方图
kde 核密度图
hex 六边形箱图
resid 回归图的残差

当我们使用 kind='hist' 时,效果如下图所示。

Seaborn 双变量图 kind='hist'

当我们使用 kind='kde' 时,效果如下图所示。

Seaborn 双变量图 kind='kde'

当我们使用 kind='hex' 时,效果如下图所示。

Seaborn 双变量图 kind='hex'

当我们使用 kind='resid' 时,效果如下图所示。

Seaborn 双变量图 kind='resid'

示例 4:散点外观

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('penguins')
# 重命名列
column_map = {
    'species': '种类',
    'island': '岛屿',
    'bill_length_mm': '喙长',
    'bill_depth_mm': '喙深',
    'flipper_length_mm': '鳍长',
    'body_mass_g': '体重',
    'sex': '性别'
}
df.rename(columns=column_map, inplace=True)

# 绘制图表
sns.jointplot(data=df, x='喙长', y='喙深', marker='x')

# 显示
plt.show()

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

Seaborn 双变量图散点外观

分析:

如果想要改变散点的外观,我们可以使用 marker 这个参数来实现。其中,Seaborn 中的 marker 参数继承了 Matplotlib 中的 marker 参数,它们的取值是一样的。

最后,我们来总结一下 jointplot() 函数的参数,常用的如下表所示。

jointplot() 函数的参数
参数 说明
data 数据部分
x x 轴坐标
y y 轴坐标
hue 添加区分(颜色)
kind 图表类型
marker 散点外观
给站长反馈

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

邮箱:lvyenet@vip.qq.com

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