4.Seaborn变量分布绘图
4.1 直方图和密度图
(1) distplot 绘制
a: 可以是 Series、1 维数组或者列表bins: 桶数hist: 是否绘制直方图kde: 是否绘制密度图,一定程度上和竖线重复rug: 是否绘制竖线fit: 拟合指定分布vertical: 是否在 y 轴显示结果- 当前版本中
distplot属于被警告函数,在 Seaborn 后续版本中会被取消,可以根据需求用histplot/kdeplot/rugplot来替换
说明:默认情况下 会绘制直方图和密度图 但是不会绘制竖线
python
np.random.seed(2024) # 设置随机种子
x = np.random.normal(size=1000) # 生成正态分布数据
sns.distplot(x) # 默认绘制直方图和密度曲线
sns.distplot(x, kde=True, rug=True)

➤ 拟合正态分布:
fit参数后面给定的分布例如正态分布 可以给定stats.norm- 结合结果来看变量还是比较符合正态分布的
fit参数后面可以接其他的分布
python
from scipy import stats # 导入统计分布
np.random.seed(2024)
x = np.random.normal(10, 20, size=2000)
sns.distplot(x, kde=False, fit=stats.norm) # 拟合正态分布并绘图
(2) histplot 绘制
histplot与distplot参数大多数相同stat为统计方法 包含countfrequencyprobabilitypercentdensityhistplot/kdeplot都可以接收DataFrame和指定列的方式绘图 这一点与前面的分类绘图/关系绘图已经对齐
python
sns.histplot(x, kde=True, bins=20) # 绘制直方图并叠加密度曲线
(3) kdeplot 绘制(密度图)
参数 fill 是否填充曲线下方
python
np.random.seed(2024)
x = np.random.normal(0, 1, size=300)
sns.kdeplot(x, fill=True) # 绘制密度曲线并填充下方区域
4.2 联合变量分布图
x、y: 横轴和纵轴变量- 默认在
x轴和y轴周边绘制直方图,用x和y绘制散点图 kind可选:'scatter'、'reg'、'resid'、'kde'、'hex'- 参数
kind='kde',指定用密度曲线去绘制图表 - 参数
kind='reg'- 指定用密度图和直方图绘制
x和y的边界 - 用散点图 + 回归直线的方式来绘制主画板
- 总体来说,
reg参数下图形使用频率更高
- 指定用密度图和直方图绘制
- 参数
python
np.random.seed(2024) # 设置随机种子
mean, cov = [0, 1], [(1, .5), (.5, 1)] # 设置均值和协方差矩阵
data = np.random.multivariate_normal(mean, cov, 200) # 生成二维正态分布数据
df = pd.DataFrame(data, columns=["x", "y"]) # 构建DataFrame
sns.jointplot(x="x", y="y", data=df) # 绘制联合分布图 默认散点+边缘直方图
sns.jointplot(x="x", y="y", data=df, kind='kde') # 二维密度图+边缘密度曲线
sns.jointplot(x="x", y="y", data=df,kind='reg') # 散点回归图+密度直方图


4.3 成对关系图
主要辅助作 EDA 探索分析
(1) pairplot 绘制
data:数据框vars:变量名列表(参与绘图的列)kind:非对角线图形,可选'scatter'、'reg'diag_kind: 对角线图形,可选'auto'、'hist'、'kde'height: 高度(子图)aspect: 宽长比
python
# sns.load_dataset("iris")
g = sns.pairplot(iris) # 绘制成对关系图
g.fig.set_size_inches(10, 6) # 设置整体图长度和高度
(2) PairGrid 绘制
- 与
pairplot参数大部分相同,但是少了diag_kind和kind - 需要通过
map_diag和map_offdiag方法去指定绘图形状 - 这两个方法只需要传入 Seaborn 或者 Matplotlib 的绘图函数
- 可以通过
hue参数来指定分组标准
python
# g.map_diag(sns.histplot)
# g.map_offdiag(sns.kdeplot, n_levels=6)
# g.map(sns.kdeplot)
g = sns.PairGrid(iris,hue='species') # 创建PairGrid对象,按species分组
g.map_diag(sns.kdeplot) # 对角线绘密度图
g.map_offdiag(sns.scatterplot) # 非对角线绘散点图
g.fig.set_size_inches(10,7) # 设置整体图长度和高度