当前位置: 代码迷 >> 综合 >> 用 Seaborn 做数据可视化(1)——绘图功能(4)可视化线性关系
  详细解决方案

用 Seaborn 做数据可视化(1)——绘图功能(4)可视化线性关系

热度:59   发布时间:2023-12-15 05:58:31.0

传送门:用 Seaborn 做数据可视化(0)总章

目录:可视化线性关系

  • 1. 绘制线性回归模型的函数
    • 1.1 regplot()
    • 1.2 lmplot()
  • 2. 不同情况下的使用
    • 2.1 变量 x 是离散值
    • 2.2 解决非简单线性关系的拟合(拟合不同的模型)
    • 2.3 离群点的问题(“outlier” observations)
    • 2.4 变量 y 是离散的(二元)
  • 3. regplot() 和 lmplot() 真正的区别:三元及以上变量的分析
  • 4. 控制图像的大小
  • 5. 在其它情况下绘制回归图

这章篇介绍的是针对回归类型的散点数据的可视化。
seaborn 中的回归曲线图主要是用来增加一个视觉指南,有助于在探索性数据分析以强调在数据集中的模式。
这是说,seaborn本身并不进行统计分析软件包。为了获得有关回归模型的拟合定量测量,可以使用statsmodels。

1. 绘制线性回归模型的函数

可视化线性关系有两个函数可以完成:regplot()implot()
返回回归曲线和 95% 置信区间(confidence interval)

1.1 regplot()

  • 输入数据: 以各种格式接受x和y变量,包括numpy数组、Pandas的Series列或DataFrame对象的变量引用;

    import numpy as np
    import seaborn as sns
    import matplotlib.pyplot as pltsns.set(color_codes=True)tips = sns.load_dataset("tips")
    
    sns.regplot(x="total_bill", y="tip", data=tips);
    

在这里插入图片描述

1.2 lmplot()

  • 输入数据:将数据集作为一个必需的参数,而x和y变量必须指定为字符串。这种形式的数据格式叫做“长型”或者“整洁”数据( “long-form” or “tidy” data)。
    regplot()可以看做是拥有lmplot()特征的子集,下面 part3有详细讲)

    sns.lmplot(x="total_bill", y="tip", data=tips);
    

在这里插入图片描述

注:regplot() 和 lmplot()在输入格式上的差别:一句话,regplot()传入参数 x 和 y 即可;lmplot() 除了
x 和 y 还必须传入 data。

2. 不同情况下的使用

2.1 变量 x 是离散值

即使对于其中一个变量是离散值,也是可以正常运行。

sns.lmplot(x="size", y="tip", data=tips);

在这里插入图片描述解决办法 1:一种方法是增加一些随机噪声的“抖动”(“jitter”),让这些值的分布更加明晰。
值得注意的是,抖动仅适用于散点图数据,且不会影响拟合的回归线本身。

sns.lmplot(x="size", y="tip", data=tips, x_jitter=.05);

在这里插入图片描述解决办法 2:对观察结果进行折叠,绘制中心趋势的估计(取中点进行拟合)

sns.lmplot(x="size", y="tip", data=tips, x_estimator=np.mean);

在这里插入图片描述

2.2 解决非简单线性关系的拟合(拟合不同的模型)

anscombe = sns.load_dataset("anscombe")
# 这个表现很好
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'I'"),ci=None, scatter_kws={
    "s": 80});

在这里插入图片描述
问题:无法拟合多次项回归模型

# 使用相同的曲线就没法拟合这个数据了
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),ci=None, scatter_kws={
    "s": 80});

在这里插入图片描述
解决:传入参数 order=2

# 解决:参数 order=2
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),order=2, ci=None, scatter_kws={
    "s": 80});

在这里插入图片描述

2.3 离群点的问题(“outlier” observations)

sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'III'"),ci=None, scatter_kws={
    "s": 80});

在这里插入图片描述
解决:传入参数 robust=True

sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'III'"),robust=True, ci=None, scatter_kws={
    "s": 80});

在这里插入图片描述

2.4 变量 y 是离散的(二元)

tips["big_tip"] = (tips.tip / tips.total_bill) > .15
sns.lmplot(x="total_bill", y="big_tip", data=tips,y_jitter=.03);

在这里插入图片描述
解决:

sns.lmplot(x="total_bill", y="big_tip", data=tips,logistic=True, y_jitter=.03);

在这里插入图片描述

3. regplot() 和 lmplot() 真正的区别:三元及以上变量的分析

regplot() 和 lmplot() 真正的区别在于,想要加入第三个或者更多的变量的时候,只能使用后者;因为 lmplot()实际上结合了regplot() and FacetGrid

The regplot() and lmplot() functions are closely related, but the former is an axes-level function while the latter is a figure-level function that combines regplot() and FacetGrid.

当然,方法也和之前的思路一致,使用增加 hue(增加变量/维度)、col(多图) 等参数可以做许多其他的事情。

sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips);

在这里插入图片描述

sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips,markers=["o", "x"], palette="Set1");

在这里插入图片描述

sns.lmplot(x="total_bill", y="tip", hue="smoker", col="time", data=tips);

在这里插入图片描述

sns.lmplot(x="total_bill", y="tip", hue="smoker",col="time", row="sex", data=tips);

在这里插入图片描述

4. 控制图像的大小

5. 在其它情况下绘制回归图

参考:

  1. Seaborn(sns)官方文档学习笔记(第四章 线性关系的可视化)
  相关解决方案