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

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

这章篇介绍的是针对回归类型的散点数据的可视化。
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 plt
    
    sns.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)官方文档学习笔记(第四章 线性关系的可视化)
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值