23 成对矩阵 pairplot
23 成对矩阵 pairplot
这类图是什么
N 个变量的两两散点矩阵,对角线放分布。
看什么:一次扫过多个指标的两两关系,快速筛出可疑相关。
5 个案例
23-1 六个电气量的成对关系矩阵:一屏扫完两两相关性
pairplot 生成 N×N 网格,对角线是各自分布、非对角线是两两散点。变量多、想知道"哪两个量值得进一步建模"时,这是最快的初筛工具。

23-2 按区域着色的四量成对矩阵

23-3 三量成对矩阵:对角线用直方图

23-4 全矩阵(含下三角冗余)用于对照 corner 版

23-5 按季节着色的负荷相关三量

代码
5 个函数取自 code/第五批_组合网格261107.py。关键约束:不调用 sns.set_theme(),否则 font.family 被改成 Arial,中文会变方框;版式由 code/公共配置261107.py 里的 setup_cn_style() 与 save() / save_grid() 统一接管。
# 摘自 code/第五批_组合网格261107.py
def pp_01():
"""六个电气量的成对关系矩阵:一屏扫完两两相关性。
pairplot 生成 N×N 网格,对角线是各自分布、非对角线是两两散点。
变量多、想知道"哪两个量值得进一步建模"时,这是最快的初筛工具。
"""
rng = np.random.default_rng(2301)
p = rng.uniform(200, 900, 180)
i = p / 1.72 + rng.normal(0, 30, 180)
u = 10.18 - 0.00085 * i + rng.normal(0, 0.06, 180)
pf = 0.90 + rng.normal(0, 0.03, 180)
t = 26 + 0.012 * p + rng.normal(0, 3, 180)
h = 4 + 0.006 * p + rng.normal(0, 1.2, 180)
df = pd.DataFrame({"有功": p, "电流": i, "电压": u, "功率因数": pf,
"温度": t, "谐波": h})
g = sns.pairplot(df, diag_kind="kde", corner=True,
plot_kws={"s": 10, "edgecolor": "white", "linewidths": 0.2},
diag_kws={"fill": True, "color": C5, "alpha": 0.5})
g.figure.set_size_inches(4.9, 4.5)
save_grid(g, "23_成对矩阵", "23_成对矩阵_六量关系", multi=True,
w_mm=124, h_mm=114,
adjust=dict(left=0.135, bottom=0.11, right=0.95, top=0.94))
def pp_02():
"""按区域着色的四量成对矩阵。"""
rng = np.random.default_rng(2302)
rows = []
for area, k in [("城区", 1.0), ("农村", 0.88)]:
p = rng.uniform(200, 900, 120) * k
rows.append(pd.DataFrame({"有功": p, "电流": p / 1.72 + rng.normal(0, 28, 120),
"电压": 10.12 - 0.0009 * p + rng.normal(0, 0.07, 120),
"温度": 26 + 0.012 * p + rng.normal(0, 3, 120),
"区域": area}))
df = pd.concat(rows, ignore_index=True)
g = sns.pairplot(df, hue="区域", palette=[C5, C3], corner=True,
plot_kws={"s": 9, "edgecolor": "white", "linewidths": 0.2})
g.figure.set_size_inches(4.9, 4.5)
save_grid(g, "23_成对矩阵", "23_成对矩阵_按区域着色", multi=True,
w_mm=124, h_mm=114,
adjust=dict(left=0.135, bottom=0.11, right=0.95, top=0.94))
def pp_03():
"""三量成对矩阵:对角线用直方图。"""
rng = np.random.default_rng(2303)
b = rng.uniform(0.2, 1.1, 200)
df = pd.DataFrame({"负载率": b, "效率": 98.4 - 1.5 * (1 - b) ** 1.4 + rng.normal(0, 0.08, 200),
"温升": 28 + 26 * b ** 2 + rng.normal(0, 2, 200)})
g = sns.pairplot(df, diag_kind="hist", corner=True,
plot_kws={"s": 12, "color": C1, "edgecolor": "white",
"linewidths": 0.2},
diag_kws={"color": C5, "edgecolor": "0.4", "linewidth": 0.3})
g.figure.set_size_inches(4.4, 4.1)
save_grid(g, "23_成对矩阵", "23_成对矩阵_变压器三量", multi=True,
w_mm=112, h_mm=104,
adjust=dict(left=0.135, bottom=0.11, right=0.95, top=0.94))
def pp_04():
"""全矩阵(含下三角冗余)用于对照 corner 版。"""
rng = np.random.default_rng(2304)
v = rng.weibull(2.1, 200) * 9.5
df = pd.DataFrame({"风速": v, "出力": np.clip(0.42 * v ** 3, 0, 1650)
+ rng.normal(0, 80, 200),
"桨距角": np.clip((v - 11) * 1.6, 0, None) + rng.normal(0, 1, 200)})
g = sns.pairplot(df, diag_kind="kde",
plot_kws={"s": 11, "color": C3, "edgecolor": "white",
"linewidths": 0.2},
diag_kws={"fill": True, "color": C3, "alpha": 0.45})
g.figure.set_size_inches(4.4, 4.1)
save_grid(g, "23_成对矩阵", "23_成对矩阵_风电机组三量", multi=True,
w_mm=112, h_mm=104,
adjust=dict(left=0.135, bottom=0.11, right=0.95, top=0.94))
def pp_05():
"""按季节着色的负荷相关三量。"""
rng = np.random.default_rng(2305)
rows = []
for s, mu in [("夏季", 620), ("冬季", 520)]:
p = rng.normal(mu, 90, 130)
rows.append(pd.DataFrame({"负荷": p, "气温": 22 + 0.02 * p + rng.normal(0, 4, 130),
"谐波": 4 + 0.005 * p + rng.normal(0, 1.1, 130),
"季节": s}))
df = pd.concat(rows, ignore_index=True)
g = sns.pairplot(df, hue="季节", palette=[C3, C1], corner=True,
plot_kws={"s": 9, "edgecolor": "white", "linewidths": 0.2})
g.figure.set_size_inches(4.4, 4.1)
save_grid(g, "23_成对矩阵", "23_成对矩阵_按季节着色", multi=True,
w_mm=112, h_mm=104,
adjust=dict(left=0.135, bottom=0.11, right=0.95, top=0.94))
说明
- axes 级图 1181×944 px;figure 级多轴图按内容取 1100~1470 px 宽。
- 图内不放标题,图题由本文件的标题承担。
- 数据为 10 kV 配网、380 V 低压、50 Hz 量级的仿真算例,随机种子固定。

浙公网安备 33010602011771号