title: 学习 seaborn [03]: 线性回归图 slug: lmplot date: 2020-12-9 tags:
- seaborn
- python category: 数据分析 link: description: type: text
线性关系可视化
此线性可视化并非统计关系中的折线图,而是excel做图中的趋势线概念,对x、y关系进行线性拟合得到关系式,对关系式的绘图。
seaborn的线性可视化不直接提供拟合关系式的各具体参数,只绘制出趋势线和置信区间,从而引导和帮助进行数据关系探索。
主要用到两个函数:
- lmplot():FacetGrid级函数,可绘制多子图;将data作为必须参数,x和y变量必须被指定为字符串。
- regplot():轴级函数。x和y可以是简单的 numpy 数组,pandas Series对象,或者作为对传递给data的 pandas DataFrame对象。
| 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
| |
添加散点分布的抖动
当一个变量采用离散值,也可以拟合线性回归,但生成的简单散点图中点元素会互相重叠,视觉上类似直线。可以给离散量添加随机抖动,以使点分布更清晰。这种抖动只影响散点分布,不影响趋势线。
x_jitter控制x轴方向的随机抖动
| |
或者绘制每个离散组中的观测值。
x_estimator转递一个函数来控制选择哪种方法进行观测值的估计,可以用平均值、中位数等。
| |

高阶关系拟合
有些数据的趋势线并非一次线性函数,可能是二次或多次函数,绘图时候需要指明趋势线的阶数。
order制定阶数
| 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 |

去除异常值绘制趋势线
数据集若存在异常值,使拟合的趋势线偏离数据的主要关系,绘图时候需要去除异常值的影响。
robust参数控制是否剔除异常值。如果取值True则采用稳健回归,剔除异常值。
绘制多子图
因为lmplot()是FacetGrid级别的函数,所以可以绘制多子图。
使用row、col参数控制行列数。
使用hue控制不同子集的颜色。