11 箱线图 boxplot

11 箱线图 boxplot

这类图是什么

箱线图,自动分组并标出离群点。

看什么:比较多组的中位数、离散度与异常值。

5 个案例

11-1 四季负荷率箱线:seaborn 自动分组并给出离群点

四季负荷率箱线:seaborn 自动分组并给出离群点

11-2 各方案线损率箱线:箱体分离程度说明效果差异

各方案线损率箱线:箱体分离程度说明效果差异

11-3 不同负载率下的变压器温升箱线

不同负载率下的变压器温升箱线

11-4 各时段功率因数箱线:与考核线对照

各时段功率因数箱线:与考核线对照

11-5 两区域电压水平箱线对比

两区域电压水平箱线对比

代码

5 个函数取自 code/第三批_类别图261107.py。关键约束:不调用 sns.set_theme(),否则 font.family 被改成 Arial,中文会变方框;版式由 code/公共配置261107.py 里的 setup_cn_style() 与 save() / save_grid() 统一接管。

# 摘自 code/第三批_类别图261107.py

def bx_01():
    """四季负荷率箱线:seaborn 自动分组并给出离群点。"""
    fig, ax = new_fig(left=0.19)
    rng = np.random.default_rng(1101)
    rows = []
    for s, mu, sd in [("春季", 0.72, 0.055), ("夏季", 0.83, 0.042),
                      ("秋季", 0.77, 0.048), ("冬季", 0.75, 0.070)]:
        rows.append(pd.DataFrame({"负荷率": rng.normal(mu, sd, 90), "季节": s}))
    df = pd.concat(rows, ignore_index=True)
    sns.boxplot(data=df, x="季节", y="负荷率", hue="季节", palette=PALETTE5,
                width=0.5, linewidth=0.6, fliersize=2.2, legend=False, ax=ax,
                medianprops={"color": C2, "linewidth": 1.2})
    ax.set_xlabel("季节")
    ax.set_ylabel("日负荷率")
    ax.set_ylim(0.50, 1.02)
    save(fig, "11_箱线图", "11_箱线图_四季负荷率")

def bx_02():
    """各方案线损率箱线:箱体分离程度说明效果差异。"""
    fig, ax = new_fig(left=0.20)
    rng = np.random.default_rng(1102)
    rows = []
    for p, mu, sd in [("原状", 4.62, 0.30), ("方案一", 3.71, 0.26),
                      ("方案二", 3.24, 0.22), ("方案三", 2.86, 0.19)]:
        rows.append(pd.DataFrame({"线损率": rng.normal(mu, sd, 120), "方案": p}))
    df = pd.concat(rows, ignore_index=True)
    sns.boxplot(data=df, x="方案", y="线损率", hue="方案", palette=PALETTE4,
                width=0.48, linewidth=0.6, fliersize=2.0, legend=False, ax=ax,
                medianprops={"color": C2, "linewidth": 1.2})
    ax.set_xlabel("降损方案")
    ax.set_ylabel("年线损率 / %")
    ax.set_ylim(2.0, 5.6)
    save(fig, "11_箱线图", "11_箱线图_各方案线损率")

def bx_03():
    """不同负载率下的变压器温升箱线。"""
    fig, ax = new_fig(left=0.19)
    rng = np.random.default_rng(1103)
    rows = []
    for L in [0.4, 0.6, 0.8, 1.0, 1.2]:
        d = rng.normal(28 + 26 * L ** 2, 2.4 + 1.2 * L, 80)
        rows.append(pd.DataFrame({"温升": d, "负载率": f"{L:.1f}"}))
    df = pd.concat(rows, ignore_index=True)
    sns.boxplot(data=df, x="负载率", y="温升", hue="负载率", palette=PALETTE5,
                width=0.5, linewidth=0.6, fliersize=2.0, legend=False, ax=ax,
                medianprops={"color": C2, "linewidth": 1.2})
    ax.axhline(65, color=C2, lw=0.9, ls="--")
    ax.set_xlabel("负载率 " + IT["beta"])
    ax.set_ylabel("顶层油温升 " + IT["T"] + " / K")
    ax.set_ylim(20, 92)
    save(fig, "11_箱线图", "11_箱线图_变压器温升")

def bx_04():
    """各时段功率因数箱线:与考核线对照。"""
    fig, ax = new_fig(left=0.19)
    rng = np.random.default_rng(1104)
    rows = []
    for seg, mu in [("0-4", 0.87), ("4-8", 0.91), ("8-12", 0.86), ("16-20", 0.94)]:
        rows.append(pd.DataFrame({"功率因数": rng.normal(mu, 0.026, 80), "时段": seg}))
    df = pd.concat(rows, ignore_index=True)
    sns.boxplot(data=df, x="时段", y="功率因数", hue="时段", palette=PALETTE4,
                width=0.5, linewidth=0.6, fliersize=2.0, legend=False, ax=ax,
                medianprops={"color": C2, "linewidth": 1.2})
    ax.axhline(0.90, color=C2, lw=0.8, ls="--")
    ax.set_xlabel("时段 / h")
    ax.set_ylabel("功率因数 cos " + IT["phi"])
    ax.set_ylim(0.78, 1.00)
    save(fig, "11_箱线图", "11_箱线图_各时段功率因数")

def bx_05():
    """两区域电压水平箱线对比。"""
    fig, ax = new_fig(left=0.19)
    rng = np.random.default_rng(1105)
    rows = []
    for area, mu, sd in [("城区", 10.15, 0.09), ("郊区", 10.02, 0.14),
                         ("农村", 9.93, 0.18)]:
        rows.append(pd.DataFrame({"电压": rng.normal(mu, sd, 150), "区域": area}))
    df = pd.concat(rows, ignore_index=True)
    sns.boxplot(data=df, x="区域", y="电压", hue="区域", palette=PALETTE3,
                width=0.48, linewidth=0.6, fliersize=2.0, legend=False, ax=ax,
                medianprops={"color": C2, "linewidth": 1.2})
    ax.axhline(9.30, color=C2, lw=0.7, ls="--")
    ax.set_xlabel("供电区域")
    ax.set_ylabel("母线电压 " + IT["U"] + " / kV")
    ax.set_ylim(9.35, 10.60)
    save(fig, "11_箱线图", "11_箱线图_三区域电压")

说明

  • axes 级图 1181×944 px;figure 级多轴图按内容取 1100~1470 px 宽。
  • 图内不放标题,图题由本文件的标题承担。
  • 数据为 10 kV 配网、380 V 低压、50 Hz 量级的仿真算例,随机种子固定。
posted @ 2026-11-08 08:31  小青蛙电气  阅读(4)  评论(0)    收藏  举报