240
我爱毛绒绒~~~~~~~

Seaborn学习指南

安装与配置

Seaborn构建在Matplotlib之上,因此可以结合Matplotlib进行深度自定义。例如,使用plt.subplots创建图形后,在子图上绘制Seaborn图形,然后使用Matplotlib的函数调整细节。

Seabron的核心价值在于自动计算统计指标,比如置信区间

置信区间是指由样本统计量所构造的总体参数的估计区间

import numpy as np
import pandas as pd
import seaborn as sns

# 可在绘图函数中自动计算平均值+置信区间
sns.barplot(data=tips, x="day", y="total_bill", ci=95)

#手动计算如下
avg = tips.groupby('day')['total_bill'].mean()
std = tips.groupby('day')['total_bill'].std()
n = tips.groupby('day').size()
ci = 1.96 * std / np.sqrt(n)  # 95%置信区间
  • 安装用pip

核心功能

内置数据集

  • sns.get_dataset_names():查看所有内置数据集
    image

  • sns.load_dataset('tips'):下载数据集
    数据集特性:

    • 精心设计的统计数据集
    • 自动处理缺失值
    • 包含分类变量和连续变量

image

如果无法下载可以试试关闭电脑防火墙

样式设置

sns.set_style():设置主题

Seaborn 通过预设主题解决 Matplotlib 的默认样式问题

  • darkgrid(默认):灰色背景,白色网格
  • whitegrid:白色背景,网格线
  • dark:深灰色背景,无网格
  • white:白色背景,无网格
  • ticks:白色背景,四周有刻度线
### 五大主题风格对比
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

styles = ["darkgrid", "whitegrid", "dark", "white", "ticks"]
for i, style in enumerate(styles, 1):
    plt.subplot(2, 3, i)
    sns.set_style(style)
    sns.barplot(x=["A", "B"], y=[3, 7])
    plt.title(style)
plt.tight_layout()
plt.show()

image

sns.set_context():设置上下文

  • context:控制图形的比例,适合不同的使用场景(如论文、演讲等)
    • paper:最小,适合论文插图
    • notebook:默认适合Jupyter Notebook
    • talk:较大适合,适合演讲
    • poster:海报/展板
  • font_scale:字体缩放比例 (=1.2放大20%)
  • rc=None:额外覆盖的rc参数
    image

sns.set_palette():设置调色板

  • 预设调色板:deep, muted, pastel, dark, colorblind
  • 连续调色板:rocket, mako, viridis, magma
  • 离散调色板:Set1, Set2, Paired, tab10
  • 发散调色板:vlag, icefire, coolwarm

常见图表

关系图:用于展示两个变量之间的关系

sns.scatterplot():散点图

创建高度可定制的散点图,用于展示两个数值变量之间的关系,支持多个分组维度

  • 自动处理颜色,大小和样式映射
  • 支持数值和分类变量的分组
  • 内置颜色调色板和样式控制
  • 边缘线处理增强可读性

详细参数如下:
image

  • 基本散点图
    image

  • 多维度分组散点图
    image

  • 带回归线散点图
    image

sns.lineplot():折线图(可带置信区间)

展示数据随时间或有序变量的变化趋势,支持多线比较和置信区间

  • 自动聚合重复x值和y值
  • 计算并绘制置信区间
  • 支持多线分组
  • 处理缺失值只能插值

详细参数如下:
image

  • 基本折线图
    image

  • 多分组折线图
    image

分布图:用于展示单变量双变量分布情况

sns.histplot():直方分布图

展示数值变量的分布情况,可结合核密度估计(KDE)和地毯图

  • 灵活的箱数(bins)设置;
  • 支持单变量和多变量分布;
  • 可叠加KDE和地毯图

详细参数如下:
image

  • 基本直方图
    image

  • 分组直方图
    image

  • 双变量直方图
    image

sns.kdeplot():核密度估计图

创建核密度估计图,用于可视化单变量或双变量的概率密度分布

  • 单变量或双变量密度估计
  • 支持填充和轮廓图
  • 多种带宽计算方法
  • 分层可视化

详细参数如下:
image

  • 单变量KDE
    image

  • 双变量KDE
    image

  • 分组KDE比较
    image

  • 轮廓线KDE
    image

sns.ecdfplot():经验累积分布函数图

可视化数据的经验累计分布函数(ECDE),直接显示数据分布而不依赖分箱

  • 无参数估计,直接展示数据
  • 直观比较分布
  • 显示数据百分位点
  • 支持多分组

详细参数如下
image

  • 基本ECDF图
    image

  • 分组比较ECDF
    image

sns.rugplot():地毯图

在坐标轴上显示数据点的位置,通常作为其他图的补充

  • 简洁显示数据分布
  • 高效展示大量数据点
  • 完美配合KDE和直方图

详细参数如下
image

  • 双变量地毯图
    image

  • 分组地毯图
    image

  • 配合直方图和KDE
    image

分类图

sns.barplot():条形统计图

用于展示分类变量的集中趋势(通常是平均值)及置信区间,自动计算统计量并可视化

  • 自动计算并显示平均值核置信区间;
  • 支持分组和嵌套条形图;
  • 可处理分类变量和数值变量

详细参数如下:
image

  • 基础条形统计图
    image

  • 分组条形图
    image

sns.boxplot():箱线图

展示数据分布的无数概括(最小值,Q1,中位数,Q3,最大值)以及离群值

  • 直观显示数据分布和离群值
  • 支持多组比较
  • 可水平或垂直显示
  • 自动处理分类变量

详细参数如下:
image

  • 基础箱线图
    image

  • 分组箱线图
    image

sns.countplot():计数条形图(每个类别的样本数)

显示分类变量的观测数量,自动计算并绘制每个类别的计数

  • 自动分类计数
  • 支持水平/垂直显示
  • 分组嵌套条形图
  • 颜色编码分类

详细参数如下:
image

  • 基本计数图
    image

  • 分组计数图
    image

  • 水平计数图
    image

sns.violinplot():小提琴图

结合箱线图和核密度估计,展示数据分布形状和密度

  • 显示数据分布形状
  • 包含箱线图元素
  • 支持分组和嵌套
  • 可拆分比较

详细参数如下:
image

  • 基础小提琴图
    image

  • 高级分组小提琴图
    image

sns.swarmplot():蜂群图

显示所有数据点的分布,点会调整位置避免重叠,类似散点图但专门为分类变量设计

  • 显示所有数据点
  • 自动避免点重叠
  • 保留原始数据分布
  • 适合中小规模数据集

详细参数如下:
image

  • 基础蜂群图
    image

  • 与箱线图组合
    image

回归图

sns.regplot():回归模型模拟合图

它不仅能可视化两个变量之间的关系,还能展示线性回归模拟的拟合结果

  • 绘制散点图展示原始数据点
  • 计算并绘制线性回归拟合线
  • 可显示回归线的置信区间
  • 支持多种回归模型(线性,多项式,逻辑回归等)
  • 提供残差图等诊断信息

详细参数如下:

sns.regplot(
    data=None,          # 数据框
    x=None, y=None,     # 坐标轴变量
    x_estimator=None,   # 对x分组计算y的估计值
    x_bins=None,        # 分组箱数
    x_ci="ci",          # x分组的置信区间
    scatter=True,       # 是否显示散点
    fit_reg=True,       # 是否拟合回归线
    ci=95,              # 置信区间大小 (0-100)
    n_boot=1000,        # 自助法迭代次数
    units=None,         # 抽样单位
    seed=None,          # 随机种子
    order=1,            # 多项式阶数
    logistic=False,     # 是否使用逻辑回归
    lowess=False,       # 是否使用LOWESS平滑
    robust=False,       # 是否使用鲁棒回归
    logx=False,         # 是否对x取对数
    x_partial=None,     # 控制变量x
    y_partial=None,     # 控制变量y
    truncate=True,      # 是否截断回归线到数据范围
    dropna=True,        # 是否删除缺失值
    x_jitter=None,      # x轴抖动
    y_jitter=None,      # y轴抖动
    label=None,         # 图例标签
    color=None,         # 统一颜色
    marker="o",         # 点标记样式
    scatter_kws=None,   # 散点图参数
    line_kws=None,      # 回归线参数
    ax=None,            # 绘图轴对象
    **kwargs            # 其他参数
)

核心参数详解
image

image

image

  • 基础线性回归
    image

  • 多项式回归
    image

  • 逻辑回归
    image

sns.lmplot():

在分面网格上绘制回归模型和散点图,是 regplot 的高级分面版本

  • 支持分面网络
  • 灵活回归模型
  • 自动分组颜色
  • 高度可定制

详细参数如下:

sns.lmplot(
    data=None,          # 数据框
    x=None, y=None,     # 坐标轴变量
    hue=None,           # 颜色分组
    col=None,           # 列分面变量
    row=None,           # 行分面变量
    palette=None,       # 调色板
    col_wrap=None,      # 每行最大列数
    height=5,           # 每个分面高度
    aspect=1,           # 宽高比
    markers="o",        # 点标记
    sharex=True,        # 共享x轴
    sharey=True,        # 共享y轴
    hue_order=None,     # 分组顺序
    col_order=None,     # 列分面顺序
    row_order=None,     # 行分面顺序
    legend=True,        # 是否显示图例
    legend_out=True,    # 图例是否在外
    x_estimator=None,   # x分组聚合函数
    x_bins=None,        # x分组箱数
    scatter=True,       # 是否显示散点
    fit_reg=True,       # 是否拟合回归
    ci=95,              # 置信区间
    n_boot=1000,        # 自助法样本数
    order=1,            # 多项式阶数
    logistic=False,     # 是否逻辑回归
    lowess=False,       # 是否LOWESS
    robust=False,       # 是否鲁棒回归
    logx=False,         # 是否对数x轴
    x_partial=None,     # x控制变量
    y_partial=None,     # y控制变量
    truncate=True,      # 截断回归线
    x_jitter=None,      # x抖动
    y_jitter=None,      # y抖动
    scatter_kws=None,   # 散点参数
    line_kws=None,      # 回归线参数
    facet_kws=None,     # 分面参数
    **kwargs            # 其他参数
)
  • 基本分面回归
    image

  • 多项式分面回归
    image

矩阵图

sns.heatmap():

使用颜色编码的矩阵可视化二维数据

  • 直观显示数值大小
  • 支持行列聚类
  • 可添加数值标注
  • 强大的颜色映射控制

详细参数如下:
image

  • 基础热力图
    image

  • 高级热力图
    image

sns.clustermap():聚类热力图(需要Scipy库)

在热力图基础上添加层次聚类树状图,可对行和列进行聚类

  • 自动行列聚类
  • 可定制聚类方法
  • 可添加颜色条和标签

参数详解:
image

其他功能配置

高级颜色管理系统

sns.palplot()函数主要用于可视化调色板

  • sns.palplot(sns.color_palette('husl',8)):分类调色板
    image

  • sns.palplot(sns.color_palette("rocket", as_cmap=False)):连续调色板
    image

  • sns.palplot(sns.diverging_palette(220, 20, n=9)):发散调色板
    image

  • 自定义调色板
    image

多图绘图技术

多图网格

FacetGrid 是 Seaborn 中最强大的多图系统,允许基于分类变量创建网格化的图表矩阵。其核心思想是"分面" - 根据一个或多个分类变量将数据分割,并在每个子图中展示数据子集

sns.FacetGrid:创建基础FacetGrid
image

配对图

Pairplot创建数据集中数值变量两两关系的网格图,对角线显示单变量分布,非对角线显示双变量关系

sns.pairplot:基础配对图
image

联合分布图

Jointplot 在一个图表中同时展示两个变量的双变量关系及其各自的单变量分布

sns.jointplot:基础联合分布图
image

多图技术比较

image

posted @ 2025-07-17 14:46  水开白  阅读(47)  评论(0)    收藏  举报