线性关系可视化
此线性可视化并非统计关系中的折线图,而是excel做图中的趋势线概念,对x、y关系进行线性拟合得到关系式,对关系式的绘图。
seaborn的线性可视化不直接提供拟合关系式的各具体参数,只绘制出趋势线和置信区间,从而引导和帮助进行数据关系探索。
主要用到两个函数:
- lmplot():FacetGrid级函数,可绘制多子图;将data作为必须参数,x和y变量必须被指定为字符串。
- regplot():轴级函数。x和y可以是简单的 numpy 数组,pandas Series对象,或者作为对传递给data的 pandas DataFrame对象。
import 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)
![6d7185e81eccc3d05f99caff3be0bdf0.png](https://i-blog.csdnimg.cn/blog_migrate/ffe6afe93c19cb199a2adeaa9d3afb64.jpeg)
g = sns.lmplot(x="total_bill", y="tip", data=tips)
![6bab6d42db13d9a120d15d997f501a02.png](https://i-blog.csdnimg.cn/blog_migrate/73fa91a30f8518fb7e2226cb6df7acc6.jpeg)
添加散点分布的抖动
当一个变量采用离散值,也可以拟合线性回归,但生成的简单散点图中点元素会互相重叠,视觉上类似直线。可以给离散量添加随机抖动,以使点分布更清晰。这种抖动只影响散点分布,不影响趋势线。
x_jitter
控制x轴方向的随机抖动
g = sns.lmplot(x="size", y="tip", x_jitter=0.05, data=tips)
![ebb9675a477c2c40343d690ebba3d5e1.png](https://i-blog.csdnimg.cn/blog_migrate/fa6f92efba751f9e26ef056d3d02a2ac.jpeg)
或者绘制每个离散组中的观测值。
x_estimator
转递一个函数来控制选择哪种方法进行观测值的估计,可以用平均值、中位数等。
g = sns.lmplot(x="size", y="tip", x_estimator=np.mean, data=tips)
![c939d115195e576a371cd7e22980dada.png](https://i-blog.csdnimg.cn/blog_migrate/36cb9902db7413cc12ef21460323d07c.jpeg)
高阶关系拟合
有些数据的趋势线并非一次线性函数,可能是二次或多次函数,绘图时候需要指明趋势线的阶数。
order
制定阶数
anscombe = pd.read_csv('seaborn-data-master/anscombe.csv')
g = sns.lmplot(x='x', y='y', data=anscombe.query("dataset == 'II'"),
ci=None, order=2)
![8fed365d9b42630b2c4fd845546874fb.png](https://i-blog.csdnimg.cn/blog_migrate/df98b4e3a159615d8e3358aac2c601ba.jpeg)
去除异常值绘制趋势线
数据集若存在异常值,使拟合的趋势线偏离数据的主要关系,绘图时候需要去除异常值的影响。
robust
参数控制是否剔除异常值。如果取值True
则采用稳健回归,剔除异常值。
g = sns.lmplot(x='x', y='y', data=anscombe.query("dataset == 'III'"),
ci=None, robust=True)
![704a31e68692fc49cbc04384fe43252f.png](https://i-blog.csdnimg.cn/blog_migrate/52db612bc31a43dd88c2995decf2f94c.jpeg)
绘制多子图
因为lmplot()是FacetGrid级别的函数,所以可以绘制多子图。
使用row
、col
参数控制行列数。
使用hue
控制不同子集的颜色。
g = sns.lmplot(x='total_bill', y='tip', hue='smoker',
col='time', row='sex', data=tips)
![ea8f08d6f1bb064bff2b04a4c88f7102.png](https://i-blog.csdnimg.cn/blog_migrate/44b68efb52a313c86fe5f828a65e0e73.jpeg)