35 瀑布图
35 瀑布图
用途
把总量的增减逐项拆开,看每一项贡献了多少。
示例(5 张)
35-1 配电网线损构成的瀑布分解

35-2 储能项目投资构成的瀑布分解

35-3 年度负荷增长的瀑布分解

35-4 园区碳排放变化的瀑布分解

35-5 年运行成本变化的瀑布分解

代码
以下 5 个函数取自 code/第六批_组合图261107.py,直接调用即可出图。样式(宋体 + Times、10 磅、刻度朝内四边、留白自检)由 code/公共配置261107.py 的 setup_cn_style() 和 save() 统一提供,本节不再重复。
# 摘自 code/第六批_组合图261107.py
def wt_01():
"""配电网线损构成的瀑布分解。"""
fig, ax = new_fig(left=0.19)
labels = ["总损耗", "线路", "配变空载", "配变负载", "计量", "其他"]
deltas = [4.62, -1.76, -0.97, -1.11, -0.55, -0.23]
base = 0.0
for i, (lb, dv) in enumerate(zip(labels, deltas)):
if i == 0:
ax.bar(i, dv, width=0.6, color=C4, edgecolor="0.35", linewidth=0.5)
base = dv
else:
ax.bar(i, dv, bottom=base + dv if dv < 0 else base, width=0.6,
color=C1 if dv < 0 else C3, edgecolor="0.35", linewidth=0.5)
base += dv
ax.set_xticks(range(len(labels)))
ax.set_xticklabels(labels)
ax.set_xlabel("损耗项")
ax.set_ylabel("线损率 / %")
ax.set_ylim(0, 5.4)
save(fig, "35_瀑布图", "35_瀑布图_线损构成分解")
def wt_02():
"""储能项目投资构成的瀑布分解。"""
fig, ax = new_fig(left=0.19)
labels = ["总投资", "电池", "PCS", "土建", "接入", "其他"]
deltas = [420, -210, -86, -58, -42, -24]
base = 0.0
for i, dv in enumerate(deltas):
if i == 0:
ax.bar(i, dv, width=0.6, color=C4, edgecolor="0.35", linewidth=0.5)
base = dv
else:
ax.bar(i, dv, bottom=base + dv, width=0.6, color=C1,
edgecolor="0.35", linewidth=0.5)
base += dv
ax.set_xticks(range(len(labels)))
ax.set_xticklabels(labels)
ax.set_xlabel("投资项")
ax.set_ylabel("投资 / 万元")
ax.set_ylim(0, 480)
save(fig, "35_瀑布图", "35_瀑布图_投资构成分解")
def wt_03():
"""年度负荷增长的瀑布分解。"""
fig, ax = new_fig(left=0.19)
labels = ["上年", "工业", "商业", "居民", "充电桩", "本年"]
deltas = [860, 64, 38, 22, 46, 0]
base = 0.0
for i, dv in enumerate(deltas):
if i in (0, 5):
v = dv if i == 0 else base
ax.bar(i, v, width=0.6, color=C4, edgecolor="0.35", linewidth=0.5)
if i == 0:
base = v
else:
ax.bar(i, dv, bottom=base, width=0.6, color=C3,
edgecolor="0.35", linewidth=0.5)
base += dv
ax.set_xticks(range(len(labels)))
ax.set_xticklabels(labels)
ax.set_xlabel("负荷构成")
ax.set_ylabel("最大负荷 " + IT["P"] + " / kW")
ax.set_ylim(760, 1080)
save(fig, "35_瀑布图", "35_瀑布图_负荷增长分解")
def wt_04():
"""园区碳排放变化的瀑布分解。"""
fig, ax = new_fig(left=0.19)
labels = ["基准年", "光伏", "储能", "能效", "电气化", "目标年"]
deltas = [12000, -1800, -640, -920, 460, 0]
base = 0.0
for i, dv in enumerate(deltas):
if i in (0, 5):
v = dv if i == 0 else base
ax.bar(i, v, width=0.6, color=C4, edgecolor="0.35", linewidth=0.5)
if i == 0:
base = v
else:
if dv < 0:
ax.bar(i, dv, bottom=base + dv, width=0.6, color=C1,
edgecolor="0.35", linewidth=0.5)
else:
ax.bar(i, dv, bottom=base, width=0.6, color=C3,
edgecolor="0.35", linewidth=0.5)
base += dv
ax.set_xticks(range(len(labels)))
ax.set_xticklabels(labels)
ax.set_xlabel("影响因素")
ax.set_ylabel("碳排放 / (t/a)")
ax.set_ylim(0, 13500)
save(fig, "35_瀑布图", "35_瀑布图_碳排放变化分解")
def wt_05():
"""年运行成本变化的瀑布分解。"""
fig, ax = new_fig(left=0.19)
labels = ["上年成本", "电价上涨", "负荷增长", "降损", "运维优化", "本年成本"]
deltas = [680, 46, 38, -32, -18, 0]
base = 0.0
for i, dv in enumerate(deltas):
if i in (0, 5):
v = dv if i == 0 else base
ax.bar(i, v, width=0.6, color=C4, edgecolor="0.35", linewidth=0.5)
if i == 0:
base = v
else:
if dv > 0:
ax.bar(i, dv, bottom=base, width=0.6, color=C3,
edgecolor="0.35", linewidth=0.5)
else:
ax.bar(i, dv, bottom=base + dv, width=0.6, color=C1,
edgecolor="0.35", linewidth=0.5)
base += dv
ax.set_xticks(range(len(labels)))
ax.set_xticklabels(labels)
ax.set_xlabel("成本因素")
ax.set_ylabel("年运行成本 / 万元")
ax.set_ylim(560, 790)
save(fig, "35_瀑布图", "35_瀑布图_运行成本变化")
说明
- 图片尺寸 1181×944 px(100 mm × 80 mm @ 300 dpi),三维图为 1181×1122 px。
- 图内不放标题,图题由本文件的二级/三级标题承担。
- 数据为贴近广东实际量级的仿真算例,随机种子固定,重跑结果一致。

浙公网安备 33010602011771号