07 箱线图 boxplot

用途

多组分布的中位数、四分位与离群点对比,适合不同工况、不同方案的横向比较。

示例(5 张)

07-1 四季日负荷率箱线图

四季日负荷率箱线图

07-2 三条母线电压波动箱线图(含离群点)

三条母线电压波动箱线图(含离群点)

07-3 四种降损方案的年线损率分布箱线图

四种降损方案的年线损率分布箱线图

07-4 各时段功率因数分布

各时段功率因数分布

07-5 不同负载率下变压器顶层油温升分布

不同负载率下变压器顶层油温升分布

代码

以下 5 个函数取自 code/第二批_分布图型261106.py,直接调用即可出图。版式(宋体 + Times、10 磅、刻度朝内四边、图内无标题、留白自检)由 code/公共配置261106.py 的 setup_cn_style() 与 save() 统一提供。

# 摘自 code/第二批_分布图型261106.py

def box_01():
    """四季日负荷率箱线图。"""
    fig, ax = new_fig(left=0.19)
    rng = np.random.default_rng(201)
    data = [rng.normal(0.72, 0.055, 90), rng.normal(0.78, 0.048, 90),
            rng.normal(0.83, 0.042, 90), rng.normal(0.75, 0.052, 90)]
    bp = ax.boxplot(data, patch_artist=True, widths=0.5,
                    medianprops={"color": C2, "linewidth": 1.2},
                    boxprops={"linewidth": 0.6, "edgecolor": "0.3"},
                    whiskerprops={"linewidth": 0.6},
                    capprops={"linewidth": 0.6},
                    flierprops={"marker": "o", "markersize": 2.5,
                                "markerfacecolor": C6, "markeredgewidth": 0})
    for patch in bp["boxes"]:
        patch.set_facecolor(C5)
    ax.set_xticks([1, 2, 3, 4])
    ax.set_xticklabels(["春季", "夏季", "秋季", "冬季"])
    ax.set_xlabel("季节")
    ax.set_ylabel("日负荷率")
    ax.set_ylim(0.56, 0.98)
    save(fig, "07_箱线", "07_箱线_四季日负荷率")

def box_02():
    """三条母线电压波动箱线图(含离群点)。"""
    fig, ax = new_fig(left=0.17)
    rng = np.random.default_rng(202)
    data = [rng.normal(10.15, 0.09, 300), rng.normal(10.02, 0.13, 300),
            rng.normal(9.93, 0.17, 300)]
    bp = ax.boxplot(data, patch_artist=True, widths=0.45, notch=False,
                    medianprops={"color": C2, "linewidth": 1.2},
                    boxprops={"linewidth": 0.6, "edgecolor": "0.3"},
                    whiskerprops={"linewidth": 0.6},
                    capprops={"linewidth": 0.6},
                    flierprops={"marker": "o", "markersize": 2.0,
                                "markerfacecolor": C6, "markeredgewidth": 0})
    for patch, c in zip(bp["boxes"], [C1, C5, C3]):
        patch.set_facecolor(c)
    ax.set_xticks([1, 2, 3])
    ax.set_xticklabels(["Ⅰ 段", "Ⅱ 段", "Ⅲ 段"])
    ax.set_xlabel("母线")
    ax.set_ylabel("电压 " + IT["U"] + " / kV")
    ax.set_ylim(9.5, 10.55)
    save(fig, "07_箱线", "07_箱线_三母线电压分布")

def box_03():
    """四种降损方案的年线损率分布箱线图。"""
    fig, ax = new_fig(left=0.20)
    rng = np.random.default_rng(203)
    data = [rng.normal(4.62, 0.30, 120), rng.normal(3.71, 0.26, 120),
            rng.normal(3.24, 0.22, 120), rng.normal(2.86, 0.19, 120)]
    bp = ax.boxplot(data, patch_artist=True, widths=0.48,
                    medianprops={"color": C2, "linewidth": 1.2},
                    boxprops={"linewidth": 0.6, "edgecolor": "0.3"},
                    whiskerprops={"linewidth": 0.6},
                    capprops={"linewidth": 0.6},
                    flierprops={"marker": "o", "markersize": 2.2,
                                "markerfacecolor": C6, "markeredgewidth": 0})
    for patch, c in zip(bp["boxes"], [C6, C5, C1, C3]):
        patch.set_facecolor(c)
    ax.set_xticks([1, 2, 3, 4])
    ax.set_xticklabels(["原状", "方案一", "方案二", "方案三"])
    ax.set_xlabel("降损方案")
    ax.set_ylabel("年线损率 / %")
    ax.set_ylim(2.0, 5.5)
    save(fig, "07_箱线", "07_箱线_降损方案线损率")

def box_04():
    """各时段功率因数分布。"""
    fig, ax = new_fig(left=0.19)
    rng = np.random.default_rng(204)
    base = [0.88, 0.91, 0.86, 0.84, 0.89, 0.93]
    data = [rng.normal(b, 0.028, 80) for b in base]
    bp = ax.boxplot(data, patch_artist=True, widths=0.5,
                    medianprops={"color": C2, "linewidth": 1.2},
                    boxprops={"linewidth": 0.6, "edgecolor": "0.3"},
                    whiskerprops={"linewidth": 0.6},
                    capprops={"linewidth": 0.6},
                    flierprops={"marker": "o", "markersize": 2.2,
                                "markerfacecolor": C6, "markeredgewidth": 0})
    for patch in bp["boxes"]:
        patch.set_facecolor(C5)
    ax.axhline(0.90, color=C2, lw=0.8, ls="--", label="考核值 0.90")
    ax.set_xticks(range(1, 7))
    ax.set_xticklabels(["0-4", "4-8", "8-12", "12-16", "16-20", "20-24"])
    ax.set_xlabel("时段 / h")
    ax.set_ylabel("功率因数 cos " + IT["phi"])
    ax.set_ylim(0.78, 1.0)
    legend(ax, "lower right", ncol=1)
    save(fig, "07_箱线", "07_箱线_各时段功率因数")

def box_05():
    """不同负载率下变压器顶层油温升分布。"""
    fig, ax = new_fig(left=0.19)
    rng = np.random.default_rng(205)
    load = [0.4, 0.6, 0.8, 1.0, 1.2]
    data = [rng.normal(28 + 26 * L ** 2, 2.6, 70) for L in load]
    bp = ax.boxplot(data, patch_artist=True, widths=0.48,
                    medianprops={"color": C2, "linewidth": 1.2},
                    boxprops={"linewidth": 0.6, "edgecolor": "0.3"},
                    whiskerprops={"linewidth": 0.6},
                    capprops={"linewidth": 0.6},
                    flierprops={"marker": "o", "markersize": 2.2,
                                "markerfacecolor": C6, "markeredgewidth": 0})
    cols = [C5, C5, C1, C3, C2]
    for patch, c in zip(bp["boxes"], cols):
        patch.set_facecolor(c)
    ax.set_xticks(range(1, 6))
    ax.set_xticklabels([f"{L:.1f}" for L in load])
    ax.set_xlabel("负载率 " + IT["beta"])
    ax.set_ylabel("顶层油温升 " + IT["theta"] + " / K")
    ax.set_ylim(20, 80)
    save(fig, "07_箱线", "07_箱线_变压器油温升")

说明

  • 图片 1181×944 px(100 mm × 80 mm @ 300 dpi),三维图为 1181×1122 px。
  • 图内不放标题,图题由本文件的标题承担。
  • 数据为 10 kV 配网、380 V 低压、50 Hz 量级的仿真算例,随机种子固定,重跑结果一致。
posted on 2026-11-07 01:03  小青蛙电气  阅读(2)  评论(0)    收藏  举报