当前位置: 首页 > news >正文

20250713-`Seaborn.pairplot` 的使用注意事项

Seaborn.pairplot 的使用注意事项

sns.pairplot 是 Seaborn 中最常用、最强大的探索性数据分析(EDA)函数之一。 它在一个调用里就能同时展示:

  • 任意两两变量间的 散点图(观察关系、聚类、异常值)
  • 对角线上每个变量的 单变量分布(直方图 / KDE / 计数)
  • 类别变量 分组的 颜色映射(hue)

1. 基本语法

seaborn.pairplot(data,                 # 必需,DataFramevars=None,            # 指定列(默认全部数值列)x_vars=None, y_vars=None,  # 仅画部分组合(高级用法)hue=None,             # 按该列分组上色hue_order=None,       # hue 显示顺序palette=None,         # 调色板kind='scatter',       # 非对角线子图类型:'scatter' | 'reg' | 'kde' | 'hist'diag_kind='auto',     # 对角线:'auto' | 'hist' | 'kde' | Nonemarkers=None,         # 不同 hue 的散点形状 ['o','s','^']height=2.5,           # 单幅子图的高度(英寸inch)aspect=1,             # 宽高比(正方形)corner=False,         # 只画下三角dropna=True,          # 是否丢弃缺失值plot_kws=None,        # 传给非对角线的函数关键字(散点/回归函数)diag_kws=None,        # 传给对角线的函数关键字grid_kws=None         # 传给 PairGrid 的关键字
)

2. 参数详解 & 技巧

参数说明 & 示例
vars只画关心的列:
vars=['trip_distance', 'fare_amount', 'tip']
hue按类别上色:
hue='pickup_cluster'
kind关系图类型:
kind='reg' → 加回归线
kind='kde' → 二维核密度
diag_kind对角线:
diag_kind='hist'(直方图)
diag_kind='kde'(密度曲线)
corner=True只画下三角,节省空间
height / aspect控制整张图大小:
height=3, aspect=1.2
plot_kws传给散点图:
plot_kws={'alpha':0.4, 's':20}
diag_kws传给直方图:
diag_kws={'bins':30, 'color':'skyblue'}
markers不同 hue 的形状:
markers=['o','s','D']

3. 最常见用法示例

准备数据:

test_cols = ['medallion', 'hack_license', 'trip_time_in_mins', 'trip_distance', 'total_amount', 'pickup_dayofweek']
df = time_bins_data[test_cols].sample(frac=0.0001)  # 从数据集中随机抽取少量的样本(减少计算量)
df.columns
Index(['medallion', 'hack_license', 'trip_time_in_mins', 'trip_distance','total_amount', 'pickup_dayofweek'],dtype='object')

① 快速浏览所有数值特征

sns.pairplot(df)
plt.show()

在这里插入图片描述

② 只看指定列 + 按类别着色

sns.pairplot(df,vars=['trip_distance', 'total_amount', 'pickup_dayofweek'],hue='pickup_dayofweek',palette='Set2',height=3
)
plt.show()

在这里插入图片描述

此时就出现一个问题 (hue, hue) = ('pickup_dayofweek', 'pickup_dayofweek') 子图是空的。此时应该是 varshue 变量与核密度函数 kde 之间的冲突问题,可解决该问题的方法有以下三种:

需要注意的一个问题是: 当 diag_kind='auto'(默认值) 时,seaborn 会根据 是否指定了 hue 来自动决定对角线子图类型:

  • 如果 hue=None(未指定) → 对角线画 直方图 hist
  • 如果 hue=某个列名(指定了) → 对角线画 核密度估计 kde
  1. 不要指定 vars 的内容
sns.pairplot(df[['trip_distance', 'total_amount', 'pickup_dayofweek']],# vars=['trip_distance', 'total_amount', 'pickup_dayofweek'],hue='pickup_dayofweek',palette='Set2',# diag_kind='hist',height=3
)
plt.show()

在这里插入图片描述

  1. vars 中不要包含 hue 列,参见 ③

  2. 指定对角线子图的 diag_kind='hist' (前两个方法都不会统计显示 hue 列)

sns.pairplot(df,vars=['trip_distance', 'total_amount', 'pickup_dayofweek'],  hue='pickup_dayofweek',palette='Set2',diag_kind='hist',height=3
)
plt.show()

在这里插入图片描述

③ 下三角 + 回归线

sns.pairplot(df,vars=test_cols[:4],hue='pickup_dayofweek',     # 按类别分组palette='Set1',            # 颜色调色板kind='reg',          # 非对角线加回归diag_kind='hist',    # 对角线直方图corner=True,         # 只画左下
)
plt.show()

在这里插入图片描述

④ 离散类别变量的对角线

sns.pairplot(df,vars=test_cols,hue='pickup_dayofweek',     # 按类别分组palette='Set1',            # 颜色调色板plot_kws={'alpha': 0.4},     # 点透明度(提升重叠区域可读性)diag_kind='hist',   # 对角线子图用直方图展示单变量分布(kde, hist)
)
plt.show()

在这里插入图片描述

4. 返回对象 & 进一步自定义

pairplot 本质上是 PairGrid 的封装:

g = sns.pairplot(df,vars=test_cols[2:],hue='pickup_dayofweek',     # 按类别分组palette='Set1',            # 颜色调色板plot_kws={'alpha': 0.4},     # 点透明度(提升重叠区域可读性)diag_kind='hist',   # 对角线子图用直方图展示单变量分布(kde, hist)
)
g.fig.suptitle("My Pairplot", y=1.02)     # 总标题
g.set(xlim=(0, 100), ylim=(0, 100))       # 统一坐标轴范围(需要合理设置,不然有些数据可能会无法显示)
g.map_diag(sns.histplot, kde=True)         # 对角线子图用直方图展示单变量分布(kde, hist)
plt.show()
# g.savefig("pairplot.png", dpi=300, bbox_inches='tight')  # 保存

5. 常见坑 & FAQ

问题原因 & 解决
对角线空白离散变量 + KDE → 用 diag_kind='hist'
hue 列不在 vars 里把 hue 列也放进 vars 才能在对角线看到它
图太大调小 heightcorner=True
颜色太多限制 hue_order 或使用 palette

sns.pairplot = 一次函数调用,完成所有两两关系 + 分布 + 分组可视化,是 EDA 的瑞士军刀。

http://www.dtcms.com/a/277098.html

相关文章:

  • jenkins部署前端vue项目使用Docker+Jenkinsfile方式
  • 【PTA数据结构 | C语言版】字符串插入操作
  • java.net.InetAddress
  • 学习笔记-Excel统计分析——描述统计量的计算
  • SpringBoot单元测试类拿不到bean报空指针异常
  • 算法 - 蛇形矩阵-上三角
  • 2.3 单链表的应用
  • 图像读取与模型保存--基于NWPU-RESISC45数据集的图像二分类实战
  • stm32f103c8t6移植freeRTOS内存不足报错问题的解决办法
  • 浏览器渲染原理与性能优化全解析
  • 快速傅里叶变换(FFT)中的振幅和相位
  • 【计算机网络架构】环型架构简介
  • 在 C# 中调用 Python 脚本:实现跨语言功能集成
  • ADB 调试日志全攻略:如何开启与关闭 `ADB_TRACE` 日志
  • CS课程项目设计1:交互友好的井字棋游戏
  • 详解Linux下多进程与多线程通信(二)
  • 【QT】使用QSS进行界面美化
  • 异或为什么叫异或
  • 【读书笔记】《Effective Modern C++》第3章 Moving to Modern C++
  • Datawhale AI夏令营——基于带货视频评论的用户洞察挑战赛
  • 【PTA数据结构 | C语言版】简单计算器
  • 17.使用DenseNet网络进行Fashion-Mnist分类
  • LabVIEW调用外部DLL
  • 深度学习图像分类数据集—七种树叶识别分类
  • 零基础 “入坑” Java--- 十、继承
  • ARC 03 从Github Action job 到 runner pod
  • PPO(近端策略优化)
  • 华为HarmonyOS 5.0深度解析:跨设备算力池技术白皮书(2025全场景智慧中枢)
  • 【C++】list及其模拟实现
  • C++--List