23 成对矩阵 pairplot

23 成对矩阵 pairplot

这类图是什么

N 个变量的两两散点矩阵,对角线放分布。

看什么:一次扫过多个指标的两两关系,快速筛出可疑相关。

5 个案例

23-1 六个电气量的成对关系矩阵:一屏扫完两两相关性

pairplot 生成 N×N 网格,对角线是各自分布、非对角线是两两散点。变量多、想知道"哪两个量值得进一步建模"时,这是最快的初筛工具。

六个电气量的成对关系矩阵:一屏扫完两两相关性

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

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

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

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

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

全矩阵(含下三角冗余)用于对照 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 量级的仿真算例,随机种子固定。
posted @ 2026-11-08 08:32  小青蛙电气  阅读(5)  评论(0)    收藏  举报