掌握pairplot:从图表到函数

发布时间:2023-05-19

一、pairplot图

pairplot 是 seaborn 库中的一个函数,它被用来绘制数据集中各个变量之间的关系,绘制结果是一个各个特征之间相互关系的散点图矩阵。pairplot 会在一个网格中显示某些数据中所有可能的二元关系。具体来说,该函数可以显示出每对变量之间的散点图、直方图以及密度图。 下面是一个例子,展示了鸢尾花(iris)数据集中的三种花在花瓣长度、花瓣宽度、萼片长度和萼片宽度方面的数据。可以看到,除了每个特征的直方图之外,底部和左侧也是直方图。

import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style='ticks', color_codes=True)
iris = sns.load_dataset("iris")
g = sns.pairplot(iris)
plt.show()

运行上述代码,会得到以下图表:

二、pairplot图怎么看

pairplot绘制出来之后,如何分析这幅图呢?我们可以按照以下步骤来进行分析:

  1. 对角线:对角线上是单变量分布的直方图或密度估计。直方图显示的是每个变量在数据集中的分布。密度图显示的是每个变量在数据集中的概率密度。这些图形能帮助我们检查每个特征的分布情况。
  2. 非对角线:非对角线上是两两变量之间的散点图,可以看出不同变量之间的相关关系。坐标轴上的标注可以帮助我们理解变量之间的相关性。例如,x轴标签 PetalWidth,y轴标签 SepalLength 就是花瓣宽度和萼片长度之间的关系。
  3. 下三角和上三角:可以看到,散点图沿着对角线是左下到右上的。这些散点图展示了两个特征之间的关系以及其相关性。例如,下三角中,右下角的图中可以看到,在sepal_lengthpetal_width之间存在一定的正相关性。

三、pairplot函数

下面是 pairplot 函数的定义:

seaborn.pairplot(data, *, hue=None, hue_order=None, palette=None, vars=None, x_vars=None, y_vars=None, diag_kind='auto', kind='scatter', markers=None, height=2.5, aspect=1,  dropna=True, plot_kws=None, diag_kws=None, grid_kws=None, size=None)

参数说明

  • data: DataFrame。需要进行可视化的数据集。
  • hue: 字符串。在数据集中选择一个分类变量,并在图表中使用不同的颜色标识不同类别。
  • vars: 列表。需要根据指定列或行来显示的列或行的子集。这个参数会被忽略,如果 x_varsy_vars 被指定。
  • x_vars, y_vars: 列表。需要在网格中显示的子集。x_vars 是在 x 轴上显示的变量列表,y_vars 是在 y 轴上显示的变量列表。可以同时指定 x_varsy_vars,以显示非对角线元素。
  • hue_order: 列表。用于控制分类变量级别的绘图顺序。默认情况下,是按字母顺序排序。
  • palette: 在实现颜色映射时使用的调色板。palette 可以是颜色列表或者调用 seaborn 里自定义的颜色映射。
  • kind: 字符串。每个对角线上的绘图种类。可以是“scatter”、“hist”或“kde”。非对角线上的绘图都是散点图。
  • diag_kind: 字符串。对角线上绘图的种类。“auto”表示尝试推断要使用的绘图类型,“hist”表示直方图,“kde”表示密度图。
  • markers: 用于散点图的标记风格。
  • height: 整数。每个图表的高度(以英寸为单位)。
  • aspect: 整数。网格中每个轴的宽高比。
  • dropna: 布尔值。如果为True,则将缺少 NA/NaN 值的列或行删除。默认为True。
  • diag_kws: 字典,关键字参数。传递给 diagonal 子图函数的参数。

四、pairplot()函数各个参数的含义

下面详细介绍一下pairplot()函数的各个参数的含义及如何使用:

1、data

data是需要进行可视化的数据集。可以是 pandas.DataFrame 还可以是list、tuple、ndarray 类型。下面是一个例子,使用列表作为数据集:

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
x = np.random.randn(10, 4)
pairplot = sns.pairplot(x)
plt.show()

2、hue

hue是一个字符,用于区分数据集中不同的分类。具体来说,它会在图表中使用不同的颜色标识不同类别。在下面的例子中,我们使用 iris 数据集中的 Species 变量作为 hue

import seaborn as sns
import matplotlib.pyplot as plt
sns.set()
iris = sns.load_dataset("iris")
g = sns.pairplot(iris, hue="species")
plt.show()

3、vars, x_vars, y_vars

vars, x_varsy_vars 都是可选的关键字参数,用于选择要在图表中显示的变量。vars 是指定要使用的列。使用 x_varsy_vars 可以更精细的选择要显示的列或行。下面是一个例子:

import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
g = sns.pairplot(tips, vars=["total_bill", "tip"], hue="smoker")
plt.show()

4、palette

palette 是指定用于显示 hue 变量的颜色映射。下面的代码采用两种不同的调色板。

# 默认调色板
g = sns.pairplot(iris, hue="species")
# 指定常规调色板
g = sns.pairplot(iris, hue="species", palette="husl")
plt.show()

5、diag_kind

diag_kind参数可以选择在对角线上绘制何种类型的图形,其可以取值为:“auto”、“hist”和“kde”。 ①“auto”表示函数自动识别可行的方式来表示精确图形。如果变量小于等于10,它使用“hist”;它使用“kde”代表高于10的变量数。缺省为“auto”。 ②“hist”表示在对角线的位置绘制直方图。 ③“kde”表示在对角线的位置绘制密度曲线。 下面是几个例子:

# 海德尔堡的数据集
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset("iris")
# 设置图表样式
sns.set(style="ticks", color_codes=True)
# 1. 默认
sns.pairplot(iris, diag_kind="auto", hue="species")
plt.show()
# 2. hist
sns.pairplot(iris, diag_kind="hist", hue="species")
plt.show()
# 3. kde
sns.pairplot(iris, diag_kind="kde", hue="species")
plt.show()

6、kind

如果要在非对角线上制绘制图形怎么办?kind 参数负责选择这个情况下的绘制方式。可以取值为:“scatter”、“kde”(默认值)或者“reg(回归)”。下面的代码中,通过 kind 参数设置了非对角线上的元素为散点图。

# iris 数据集
import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset("iris")
sns.set_style("ticks")
g = sns.pairplot(iris, hue="species", diag_kind="kde", kind="scatter")
plt.show()

7、markers

markers参数是一个标记列表。它被用于非对角线上绘制散点图时的标记样式选择。如果提供的标记数量少于数据集中的类别数量,则每个类别将使用每个标记的第一次出现。在下面的例子中,我们使用方块和圆圈分别表示不同类型烟民和非烟民,使用叉号表示男性和女性:

import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
g = sns.pairplot(tips, hue="smoker", markers=["o", "s"], diag_kind="hist")
plt.show()

五、plot

seaborn 开放性良好,自带的方法就满足了绝大部分绘图需求。但如果想要进一步控制图像细节,可以在 pairplot()之前调用FaciGrid类中的方法。这里列举几个重要的方法。例如,可以使用FacetGrid.map()方法来调用自定义函数。以画出一条直线为例,如下所示:

import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
g = sns.FacetGrid(tips, col="time", row="smoker")
g = g.map(plt.hist, "total_bill")
plt.show()

六、python中pairplot选取3~5个与pairplot相关的

1、hue参数

import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
sns.pairplot(tips, hue="sex", markers="+")
plt.show()

2、vars参数

Vars参数是指定要分析的变量。

import seaborn as sns
import matplotlib.pyplot as plt
iris = sns.load_dataset("iris")
sns.pairplot(iris, vars=["petal_length", "petal_width"])
plt.show()

3、diag_kind参数

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
sns.set(style="ticks")
df = sns.load_dataset("iris")
g = sns.PairGrid(df, hue="species")
g.map_diag(sns.histplot)
g.map_offdiag(sns.scatterplot)
g.add_legend()
plt.show()

4、kind参数

sns.pairplot(data, kind="reg", plot_kws={'line_kws':{'color':'red'}})

5、palette参数

调色板的种类有很多种,这里列举两种:

import seaborn as sns
import matplotlib.pyplot as plt
tips = sns.load_dataset("tips")
# 默认调色板
sns.pairplot(tips, hue="smoker")
plt.show()
# husl调色板
sns.pairplot(tips, hue="smoker", palette="husl")