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 量级的仿真算例,随机种子固定,重跑结果一致。
浙公网安备 33010602011771号