Python绘图总结(seaborn篇)之线性关系

学习https://seaborn.pydata.org 记录,描述不一定准确,具体请参考官网

%matplotlib inline
import numpy as np
import pandas as pd
from scipy import stats, integrate
import seaborn as sns
import matplotlib.pyplot as plt

# seaborn中文乱码解决方案
from matplotlib.font_manager import FontProperties
myfont=FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf',size=14)
sns.set(font=myfont.get_name())
np.random.seed(sum(map(ord, "regression")))
tips = sns.load_dataset("tips")

线性回归

1、regplot()

# 简单使用regplot()
sns.regplot(x="total_bill", y="tip", data=tips)

Python绘图总结(seaborn篇)之线性关系_第1张图片

2、lmplot()

# 简单使用lmplot()
sns.lmplot(x="total_bill", y="tip", data=tips)

Python绘图总结(seaborn篇)之线性关系_第2张图片

# x_jitter 表示沿轴随机分布,相对避免重叠
sns.lmplot(x="size", y="tip", data=tips, x_jitter=.05)

Python绘图总结(seaborn篇)之线性关系_第3张图片

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

Python绘图总结(seaborn篇)之线性关系_第4张图片

拟合不同模型

anscombe = sns.load_dataset("anscombe")
anscombe[::-5]
dataset x y
43 IV 8.0 6.89
38 IV 8.0 7.04
33 IV 8.0 6.58
28 III 6.0 6.08
23 III 8.0 6.77
18 II 4.0 3.10
13 II 13.0 8.74
8 I 12.0 10.84
3 I 9.0 8.81

1、lmplot()

# 原来数据还可以这样查询 anscombe.query("dataset == 'I'")
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})
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'II'"),order=2, ci=None, scatter_kws={"s": 80})
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'III'"),ci=None, scatter_kws={"s": 80})
# robust=True 使用 robust回归
sns.lmplot(x="x", y="y", data=anscombe.query("dataset == 'III'"),robust=True, ci=None, scatter_kws={"s": 80})

Python绘图总结(seaborn篇)之线性关系_第5张图片

Python绘图总结(seaborn篇)之线性关系_第6张图片

Python绘图总结(seaborn篇)之线性关系_第7张图片

Python绘图总结(seaborn篇)之线性关系_第8张图片
Python绘图总结(seaborn篇)之线性关系_第9张图片

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)

Python绘图总结(seaborn篇)之线性关系_第10张图片

Python绘图总结(seaborn篇)之线性关系_第11张图片

# 非参数回归
sns.lmplot(x="total_bill", y="tip", data=tips,lowess=True)

Python绘图总结(seaborn篇)之线性关系_第12张图片

2、regplot()

# 绘制残差分布
sns.residplot(x="x", y="y", data=anscombe.query("dataset == 'I'"),scatter_kws={"s": 80});

Python绘图总结(seaborn篇)之线性关系_第13张图片

多变量关系

上面的图表展示了许多探索一对变量之间关系的方法。很多时候,我们更关心两个变量变化是如何影响第三个变量的。这也是lmplot()~与regplot()的区别之一。regplot()只能显示一对变量之间的关系,而lmplot()结合了regplot()与FacetGrid,提供了一个简单的接口,允许你探索最多其他三个分类变量的影响。

# 增加分类
sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips)

Python绘图总结(seaborn篇)之线性关系_第14张图片

# 增加样式
sns.lmplot(x="total_bill", y="tip", hue="smoker", data=tips, markers=["o", "x"], palette="Set1")

Python绘图总结(seaborn篇)之线性关系_第15张图片

# 横向增加时间变量
sns.lmplot(x="total_bill", y="tip", hue="smoker", col="time", data=tips);

Python绘图总结(seaborn篇)之线性关系_第16张图片

# 纵向增加性别变量
sns.lmplot(x="total_bill", y="tip", hue="smoker",col="time", row="sex", data=tips);

Python绘图总结(seaborn篇)之线性关系_第17张图片

# 分两行显示 col_wrap=2
sns.lmplot(x="total_bill", y="tip", col="day",col_wrap=2,data=tips)

Python绘图总结(seaborn篇)之线性关系_第18张图片

你可能感兴趣的:(Python绘图)