Seaborn单变量分布可视化方法详解
import seaborn as sns
import numpy as np
import pandas as pd
import matplotlib as mpl
import matplotlib.pyplot as plt
%matplotlib inline
rand_vals = np.random.normal(size=100)
print(rand_vals)
sns.displot(rand_vals, kde=False)
<seaborn.axisgrid.FacetGrid at 0x206c5c43a60>

sns.displot(rand_vals, kde=False, bins=20)
<seaborn.axisgrid.FacetGrid at 0x206cb4f9f60>

数据分布拟合
使用distplot()函数拟合数据集的参数分布,有助于评估观测数据与理论分布是否吻合。
from scipy import stats
gamma_data = np.random.gamma(6, size=200)
sns.distplot(gamma_data, kde=False, fit=stats.gamma)
C:\Users\Administrator\AppData\Local\Temp\ipykernel_4588\2584871392.py:5: UserWarning:
distplot is a deprecated function and will be removed in seaborn v0.14.0.
Please adapt your code to use either displot (a figure-level function with
similar flexibility) or histplot (an axes-level function for histograms).
For a guide to updating your code to use the new functions, please see https://gist.github.com/mwaskom/de44147ed2974457ad6372750bbe5751
sns.distplot(gamma_data, kde=False, fit=stats.gamma);

生成二元正态分布数据
下面代码完成以下操作:
- 设置均值向量
means和协方差矩阵cov_matrix。 - 使用
np.random.multivariate_normal生成二元正态分布的随机样本sample_data。 - 将样本转换为Pandas DataFrame
df_obj。
means, cov_matrix = [0,1],[(1,.5),(.5,1)]:设置两个维度的均值为0和1,协方差矩阵主对角线为1,非对角线为0.5。sample_data = np.random.multivariate_normal(means, cov_matrix, 200):生成200个符合指定分布的随机样本。df_obj = pd.DataFrame(sample_data, columns=["x", "y"]):将数据存入DataFrame,列名分别为"x"和"y"。
means, cov_matrix = [0,1],[(1,.5),(.5,1)]
sample_data = np.random.multivariate_normal(means, cov_matrix, 200)
df_obj = pd.DataFrame(sample_data, columns=["x", "y"])
df_obj
| x | y | |
|---|---|---|
| 0 | -0.651501 | 1.753638 |
| 1 | 1.058182 | 0.658726 |
| 2 | 0.160683 | 0.167273 |
| ... | ... | ... |
| 199 | -0.094580 | 0.473490 |
200 rows × 2 columns
使用散点图观察双变量分布
sns.jointplot(x="x", y="y", data=df_obj)
<seaborn.axisgrid.JointGrid at 0x206cbd836a0>

六边形图(适用于大数据集)
以下代码实现:
- 生成1000个二元正态分布随机样本。
- 使用seaborn的六边形图展示数据密度分布。
x_vals, y_vals = np.random.multivariate_normal(means, cov_matrix, 1000).T:转置后分别提取两个维度的数据。with sns.axes_style("white")::设置绘图背景为白色。sns.jointplot(x=x_vals, y=y_vals, kind="hex", color="k"):使用六边形图(hex)绘制联合分布,颜色为黑色。
x_vals, y_vals = np.random.multivariate_normal(means, cov_matrix, 1000).T
with sns.axes_style("white"):
sns.jointplot(x=x_vals, y=y_vals, kind="hex", color="k")
多变量关系图
下面代码执行:
- 加载seaborn内置的"iris"数据集。
- 使用
pairplot函数绘制所有变量两两之间的关系图。
iris_data = sns.load_dataset("iris"):加载鸢尾花数据集。sns.pairplot(iris_data):对数据集所有数值特征绘制散点图矩阵,对角线显示直方图,用于探索特征间关联。
iris_data = sns.load_dataset("iris")
sns.pairplot(iris_data)
