7.3 PairGrid 与 JointGrid 手动装配


文档摘要

7.3 PairGrid 与 JointGrid 手动装配 PairGrid 是 pairplot 的手动挡,对角线、下三角、上三角三个区域可以各配一种图层;JointGrid 是 jointplot 的手动挡,中央与边缘四个区域独立装配。区域异图,是两个手动挡换来的核心自由度。 7.1 拆了 FacetGrid,本节补齐 Grid 家族另外两员。pairplot 与 jointplot 用起来最省心,但它们的 kind 参数各只给三四个选项;当你想让成对矩阵"对角看分布、下三角看关系、上三角看相关系数"时,只能下探。 PairGrid 三区装配 三个 map 系列方法各管一个区域,接收任何绘图函数。

7.3 PairGrid 与 JointGrid 手动装配

PairGrid 是 pairplot 的手动挡,对角线、下三角、上三角三个区域可以各配一种图层;JointGrid 是 jointplot 的手动挡,中央与边缘四个区域独立装配。区域异图,是两个手动挡换来的核心自由度。

7.1 拆了 FacetGrid,本节补齐 Grid 家族另外两员。pairplot 与 jointplot 用起来最省心,但它们的 kind 参数各只给三四个选项;当你想让成对矩阵"对角看分布、下三角看关系、上三角看相关系数"时,只能下探。

PairGrid 三区装配

import seaborn as sns import matplotlib.pyplot as plt penguins = sns.load_dataset('penguins').dropna() # 手动初始化:声明数据、配对列、分组列 g = sns.PairGrid(penguins, vars=['bill_length_mm', 'bill_depth_mm', 'flipper_length_mm', 'body_mass_g'], hue='species', diag_sharey=False) # 三区各配一种图层:对角、下三角、上三角 g.map_diag(sns.kdeplot, fill=True, alpha=0.4) # 对角:各组密度 g.map_lower(sns.scatterplot, alpha=0.5, s=15) # 下三角:散点看关系 g.map_upper(sns.kdeplot, levels=3, alpha=0.6) # 上三角:等高线看密度 g.add_legend(title='物种') plt.show() # 输出说明:同一对变量在下三角是散点、上三角是等高线—— # 关系形态与密度结构一图两读,信息密度比 pairplot 默认版翻倍

三个 map 系列方法各管一个区域,接收任何绘图函数。想让上三角显示相关系数数字,用自定义函数配 map_upper:

import numpy as np from scipy.stats import pearsonr def corr_text(x, y, **kws): r = pearsonr(x, y)[0] ax = plt.gca() ax.annotate(f'{r:.2f}', xy=(0.5, 0.5), xycoords='axes fraction', ha='center', fontsize=13, color='crimson' if abs(r) > 0.7 else 'dimgray') g = sns.PairGrid(penguins, vars=['bill_length_mm', 'bill_depth_mm', 'flipper_length_mm', 'body_mass_g']) g.map_lower(sns.scatterplot, s=12, alpha=0.5) g.map_upper(corr_text) g.map_diag(sns.histplot, kde=True) # 输出说明:上三角只剩相关系数矩阵,绝对值超 0.7 的标红—— # pairplot 的"看形态"与 corr heatmap 的"读数值"合并成一张图

corner=True 是省版面开关(只保留下三角与对角线),vars 是列选择开关(防标签列混入,第 2.3 节的坑在这里同样适用)。

JointGrid 中央与边缘

# 手动初始化:两个数值列决定中央,边缘自动预留 g = sns.JointGrid(data=penguins, x='bill_length_mm', y='bill_depth_mm', hue='species', height=6) # 中央与边缘分别装配 g.plot_joint(sns.scatterplot, alpha=0.55, s=20) # 中央:散点 g.plot_marginals(sns.boxplot, orient='y') # 边缘:横向箱线(替代默认直方图) # 输出说明:边缘箱线把"三个物种的组间错位"压缩成摘要, # 中央散点保留个体证据——比 jointplot 默认版更像一张正式分析图

jointplot 的 kind 只有 scatter、kde、hist、reg、resid 几档,且中央边缘必须配套;JointGrid 把两者解耦——中央散点配边缘箱线、中央回归配边缘 kde,任意组合。

# 回归主题的常见组合:中央回归线加边缘 kde g = sns.JointGrid(data=penguins, x='flipper_length_mm', y='body_mass_g', height=6) g.plot_joint(sns.regplot, scatter_kws={'alpha': 0.4, 's': 18}, line_kws={'color': 'crimson'}) g.plot_marginals(sns.kdeplot, fill=True, alpha=0.4) g.set_axis_labels('翻翅长(毫米)', '体重(克)') # 输出说明:翻翅长与体重 0.87 的强相关在中央呈一条紧凑的回归带, # 边缘 kde 显示两变量各自的双峰——物种混合的痕迹(辛普森检查的入口)

三兄弟的分工总表

Grid 布局结构 快捷函数 手动挡独有自由
FacetGrid 类别切分的网格 relplot 等 map 自定义函数、逐面板加工
PairGrid 列对矩阵 pairplot 三区异图、上三角放相关系数
JointGrid 中央加四边 jointplot 中央边缘解耦、任意组合

⚠️ 常见坑:PairGrid 全列配对在列多时是平方级开销(10 列 100 面板),先用 vars 圈定三到五列再装配;JointGrid 的 plot_marginals 对 orient 参数敏感,横向箱线写 orient='y' 而不是调 x 与 y。

💡 关键直觉:三个 Grid 各占一种布局原型——切分、配对、联合。数据里的"类别、列对、变量对"三种结构正好一一对应,认结构选 Grid,比记函数名可靠。

本节要点回顾

  • PairGrid 三区:map_diag、map_lower、map_upper 各配一层,信息密度翻倍;
  • 上三角放相关系数:自定义函数配 map_upper,形态与数值同图;
  • JointGrid 解耦:中央与边缘独立装配,regplot 配 kde 是高频组合;
  • vars 圈列:配对矩阵平方级开销,先挑列再装配;
  • 三原型对三结构:类别切分、列配对、变量联合,认结构选 Grid。

下一节把 Seaborn 放回工具链:Pandas 的分组结果与 sklearn 的模型输出如何流进图形。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U