title: 学习 seaborn [03]: 线性回归图 slug: lmplot date: 2020-12-9 tags:
此线性可视化并非统计关系中的折线图,而是excel做图中的趋势线概念,对x、y关系进行线性拟合得到关系式,对关系式的绘图。
seaborn的线性可视化不直接提供拟合关系式的各具体参数,只绘制出趋势线和置信区间,从而引导和帮助进行数据关系探索。
主要用到两个函数:
pythonimport seaborn as sns
import pandas as pd
import numpy as np
%matplotlib inline
sns.set()
tips = pd.read_csv('seaborn-data-master/tips.csv')
display(tips)
total_bill | tip | sex | smoker | day | time | size | |
---|---|---|---|---|---|---|---|
0 | 16.99 | 1.01 | Female | No | Sun | Dinner | 2 |
1 | 10.34 | 1.66 | Male | No | Sun | Dinner | 3 |
2 | 21.01 | 3.50 | Male | No | Sun | Dinner | 3 |
3 | 23.68 | 3.31 | Male | No | Sun | Dinner | 2 |
4 | 24.59 | 3.61 | Female | No | Sun | Dinner | 4 |
... | ... | ... | ... | ... | ... | ... | ... |
239 | 29.03 | 5.92 | Male | No | Sat | Dinner | 3 |
240 | 27.18 | 2.00 | Female | Yes | Sat | Dinner | 2 |
241 | 22.67 | 2.00 | Male | Yes | Sat | Dinner | 2 |
242 | 17.82 | 1.75 | Male | No | Sat | Dinner | 2 |
243 | 18.78 | 3.00 | Female | No | Thur | Dinner | 2 |
244 rows × 7 columns
pythong = sns.lmplot(x="total_bill", y="tip", data=tips)
当一个变量采用离散值,也可以拟合线性回归,但生成的简单散点图中点元素会互相重叠,视觉上类似直线。可以给离散量添加随机抖动,以使点分布更清晰。这种抖动只影响散点分布,不影响趋势线。
x_jitter
控制x轴方向的随机抖动
pythong = sns.lmplot(x="size", y="tip", x_jitter=0.05, data=tips)
或者绘制每个离散组中的观测值。
x_estimator
转递一个函数来控制选择哪种方法进行观测值的估计,可以用平均值、中位数等。
pythong = sns.lmplot(x="size", y="tip", x_estimator=np.mean, data=tips)
有些数据的趋势线并非一次线性函数,可能是二次或多次函数,绘图时候需要指明趋势线的阶数。
order
制定阶数
pythonanscombe = pd.read_csv('seaborn-data-master/anscombe.csv')
display(anscombe)
dataset | x | y | |
---|---|---|---|
0 | I | 10.0 | 8.04 |
1 | I | 8.0 | 6.95 |
2 | I | 13.0 | 7.58 |
3 | I | 9.0 | 8.81 |
4 | I | 11.0 | 8.33 |
5 | I | 14.0 | 9.96 |
6 | I | 6.0 | 7.24 |
7 | I | 4.0 | 4.26 |
8 | I | 12.0 | 10.84 |
9 | I | 7.0 | 4.82 |
10 | I | 5.0 | 5.68 |
11 | II | 10.0 | 9.14 |
12 | II | 8.0 | 8.14 |
13 | II | 13.0 | 8.74 |
14 | II | 9.0 | 8.77 |
15 | II | 11.0 | 9.26 |
16 | II | 14.0 | 8.10 |
17 | II | 6.0 | 6.13 |
18 | II | 4.0 | 3.10 |
19 | II | 12.0 | 9.13 |
20 | II | 7.0 | 7.26 |
21 | II | 5.0 | 4.74 |
22 | III | 10.0 | 7.46 |
23 | III | 8.0 | 6.77 |
24 | III | 13.0 | 12.74 |
25 | III | 9.0 | 7.11 |
26 | III | 11.0 | 7.81 |
27 | III | 14.0 | 8.84 |
28 | III | 6.0 | 6.08 |
29 | III | 4.0 | 5.39 |
30 | III | 12.0 | 8.15 |
31 | III | 7.0 | 6.42 |
32 | III | 5.0 | 5.73 |
33 | IV | 8.0 | 6.58 |
34 | IV | 8.0 | 5.76 |
35 | IV | 8.0 | 7.71 |
36 | IV | 8.0 | 8.84 |
37 | IV | 8.0 | 8.47 |
38 | IV | 8.0 | 7.04 |
39 | IV | 8.0 | 5.25 |
40 | IV | 19.0 | 12.50 |
41 | IV | 8.0 | 5.56 |
42 | IV | 8.0 | 7.91 |
43 | IV | 8.0 | 6.89 |
pythong = sns.lmplot(x='x', y='y', data=anscombe.query("dataset == 'II'"),
ci=None, order=2)
数据集若存在异常值,使拟合的趋势线偏离数据的主要关系,绘图时候需要去除异常值的影响。
robust
参数控制是否剔除异常值。如果取值True
则采用稳健回归,剔除异常值。
pythong = sns.lmplot(x='x', y='y', data=anscombe.query("dataset == 'III'"),
ci=None, robust=True)
因为lmplot()是FacetGrid级别的函数,所以可以绘制多子图。
使用row
、col
参数控制行列数。
使用hue
控制不同子集的颜色。
pythong = sns.lmplot(x='total_bill', y='tip', hue='smoker',
col='time', row='sex', data=tips)
本文作者:tsingk
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!