40 哑铃图
40 哑铃图
用途
两点一线的对比,改造前后、方案前后一目了然。
示例(5 张)
40-1 改造前后各段线损率的哑铃图

40-2 各节点改造前后电压的哑铃图

40-3 各馈线改造前后负载率的哑铃图

40-4 各方案投运前后效率的哑铃图

40-5 各月峰谷差变化的哑铃图

代码
以下 5 个函数取自 code/第六批_组合图261107.py,直接调用即可出图。样式(宋体 + Times、10 磅、刻度朝内四边、留白自检)由 code/公共配置261107.py 的 setup_cn_style() 和 save() 统一提供,本节不再重复。
# 摘自 code/第六批_组合图261107.py
def db_01():
"""改造前后各段线损率的哑铃图。"""
fig, ax = new_fig(left=0.24)
seg = ["主干线", "支线 1", "支线 2", "支线 3", "接户线"]
before = np.array([4.8, 5.6, 4.2, 6.1, 3.6])
after = np.array([3.4, 4.1, 3.2, 4.4, 2.9])
y = np.arange(len(seg))
for i in range(len(seg)):
ax.plot([after[i], before[i]], [y[i], y[i]], color=C6, lw=1.2, zorder=1)
ax.scatter(before, y, s=28, color=C2, zorder=2, label="改造前")
ax.scatter(after, y, s=28, color=C1, zorder=2, label="改造后")
ax.set_yticks(y)
ax.set_yticklabels(seg)
ax.set_ylim(-0.6, len(seg) - 0.4)
ax.set_xlabel("线损率 / %")
ax.set_ylabel("线路区段")
legend(ax, "lower right", ncol=1)
save(fig, "40_哑铃图", "40_哑铃图_改造前后线损")
def db_02():
"""各节点改造前后电压的哑铃图。"""
fig, ax = new_fig(left=0.19)
node = [f"N{i}" for i in range(1, 8)]
before = np.array([9.72, 9.68, 9.61, 9.58, 9.65, 9.70, 9.75])
after = np.array([10.02, 9.98, 9.94, 9.91, 9.96, 10.01, 10.05])
y = np.arange(len(node))
for i in range(len(node)):
ax.plot([before[i], after[i]], [y[i], y[i]], color=C6, lw=1.2, zorder=1)
ax.scatter(before, y, s=28, color=C2, zorder=2, label="改造前")
ax.scatter(after, y, s=28, color=C1, zorder=2, label="改造后")
ax.set_yticks(y)
ax.set_yticklabels(node)
ax.set_ylim(-0.6, len(node) - 0.4)
ax.set_xlabel("节点电压 " + IT["U"] + " / kV")
ax.set_ylabel("节点")
legend(ax, "lower right", ncol=1)
save(fig, "40_哑铃图", "40_哑铃图_改造前后电压")
def db_03():
"""各馈线改造前后负载率的哑铃图。"""
fig, ax = new_fig(left=0.20)
fd = ["城东", "城西", "城南", "城北", "新区"]
before = np.array([86, 92, 103, 74, 68])
after = np.array([72, 78, 86, 64, 58])
y = np.arange(len(fd))
for i in range(len(fd)):
ax.plot([after[i], before[i]], [y[i], y[i]], color=C6, lw=1.2, zorder=1)
ax.scatter(before, y, s=28, color=C2, zorder=2, label="改造前")
ax.scatter(after, y, s=28, color=C1, zorder=2, label="改造后")
ax.axvline(100, color=C4, lw=0.6, ls=":", label="满载线")
ax.set_yticks(y)
ax.set_yticklabels(fd)
ax.set_ylim(-0.6, len(fd) - 0.4)
ax.set_xlabel("最大负载率 / %")
ax.set_ylabel("馈线")
ax.set_xlim(50, 112)
legend(ax, "lower left", ncol=1)
save(fig, "40_哑铃图", "40_哑铃图_改造前后负载率")
def db_04():
"""各方案投运前后效率的哑铃图。"""
fig, ax = new_fig(left=0.22)
plan = ["方案一", "方案二", "方案三", "方案四"]
before = np.array([0.842, 0.842, 0.842, 0.842])
after = np.array([0.881, 0.906, 0.924, 0.893])
y = np.arange(len(plan))
for i in range(len(plan)):
ax.plot([before[i], after[i]], [y[i], y[i]], color=C6, lw=1.2, zorder=1)
ax.scatter(before, y, s=30, color=C2, zorder=2, label="原状")
ax.scatter(after, y, s=30, color=C1, zorder=2, label="投运后")
ax.set_yticks(y)
ax.set_yticklabels(plan)
ax.set_ylim(-0.6, len(plan) - 0.4)
ax.set_xlabel("系统综合效率 " + IT["eta"])
ax.set_ylabel("配置方案")
ax.set_xlim(0.83, 0.94)
legend(ax, "lower right", ncol=1)
save(fig, "40_哑铃图", "40_哑铃图_方案前后效率")
def db_05():
"""各月峰谷差变化的哑铃图。"""
fig, ax = new_fig(left=0.19)
mon = ["1", "2", "3", "4", "5", "6"]
before = np.array([268, 252, 296, 312, 348, 372])
after = np.array([232, 226, 258, 274, 306, 328])
y = np.arange(len(mon))
for i in range(len(mon)):
ax.plot([after[i], before[i]], [y[i], y[i]], color=C6, lw=1.2, zorder=1)
ax.scatter(before, y, s=28, color=C2, zorder=2, label="调节前")
ax.scatter(after, y, s=28, color=C1, zorder=2, label="调节后")
ax.set_yticks(y)
ax.set_yticklabels(mon)
ax.set_ylim(-0.6, len(mon) - 0.4)
ax.set_xlabel("日峰谷差 " + IT["P"] + " / kW")
ax.set_ylabel("月份")
legend(ax, "lower left", ncol=1)
save(fig, "40_哑铃图", "40_哑铃图_峰谷差变化")
说明
- 图片尺寸 1181×944 px(100 mm × 80 mm @ 300 dpi),三维图为 1181×1122 px。
- 图内不放标题,图题由本文件的二级/三级标题承担。
- 数据为贴近广东实际量级的仿真算例,随机种子固定,重跑结果一致。

浙公网安备 33010602011771号