08 分布分面图 displot
这类图是什么
figure 级分布图,hist/kde/ecdf 任选并分面。
看什么:按类别并排比较分布,共享坐标轴便于横向对照。
5 个案例
08-1 按负荷类型分面的直方图

08-2 按季节分面的负荷率密度

08-3 按测点分面的电压累积分布

08-4 按天气分面的光伏出力分布

08-5 按方案分面的效率分布

代码
5 个函数取自 code/第二批_分布图261107.py。关键约束:不调用 sns.set_theme(),否则 font.family 被改成 Arial,中文会变方框;版式由 code/公共配置261107.py 里的 setup_cn_style() 与 save() / save_grid() 统一接管。
# 摘自 code/第二批_分布图261107.py
def dp_01():
"""按负荷类型分面的直方图。"""
fig, ax = new_fig(left=0.19)
fig.delaxes(ax)
rng = np.random.default_rng(801)
rows = []
for kind, mu, sd in [("工业", 620, 90), ("商业", 480, 70)]:
rows.append(pd.DataFrame({"负荷": rng.normal(mu, sd, 600), "类型": kind}))
df = pd.concat(rows, ignore_index=True)
g = sns.displot(data=df, x="负荷", col="类型", hue="类型", bins=24,
palette=PALETTE3[:2], height=3.15, aspect=0.78, legend=False,
edgecolor="0.4", linewidth=0.3)
g.set_axis_labels("有功负荷 " + IT["P"] + " / kW", "频次")
save_grid(g, "08_分布分面图", "08_分布分面图_按类型分面负荷",
left=0.14, bottom=0.21, right=0.97, top=0.84)
def dp_02():
"""按季节分面的负荷率密度。"""
fig, ax = new_fig(left=0.19)
fig.delaxes(ax)
rng = np.random.default_rng(802)
rows = []
for s, mu in [("春季", 0.72), ("夏季", 0.84)]:
rows.append(pd.DataFrame({"负荷率": rng.normal(mu, 0.05, 700), "季节": s}))
df = pd.concat(rows, ignore_index=True)
g = sns.displot(data=df, x="负荷率", col="季节", hue="季节", kind="kde",
fill=True, palette=PALETTE3[:2], height=3.15, aspect=0.78,
legend=False)
g.set_axis_labels("日负荷率", "概率密度")
save_grid(g, "08_分布分面图", "08_分布分面图_按季节分面负荷率",
left=0.14, bottom=0.21, right=0.97, top=0.84)
def dp_03():
"""按测点分面的电压累积分布。"""
fig, ax = new_fig(left=0.19)
fig.delaxes(ax)
rng = np.random.default_rng(803)
rows = []
for pt, mu in [("Ⅰ 段", 10.10), ("Ⅲ 段", 9.96)]:
rows.append(pd.DataFrame({"电压": rng.normal(mu, 0.12, 700), "测点": pt}))
df = pd.concat(rows, ignore_index=True)
g = sns.displot(data=df, x="电压", col="测点", hue="测点", kind="ecdf",
palette=PALETTE3[:2], height=3.15, aspect=0.78, legend=False,
lw=1.1)
g.set_axis_labels("母线电压 " + IT["U"] + " / kV", "累积概率")
save_grid(g, "08_分布分面图", "08_分布分面图_按测点分面电压",
left=0.14, bottom=0.21, right=0.97, top=0.84)
def dp_04():
"""按天气分面的光伏出力分布。"""
fig, ax = new_fig(left=0.19)
fig.delaxes(ax)
rng = np.random.default_rng(804)
rows = []
for w, mu, sd in [("晴天", 620, 180), ("多云", 380, 150)]:
rows.append(pd.DataFrame({"出力": rng.normal(mu, sd, 700), "天气": w}))
df = pd.concat(rows, ignore_index=True)
g = sns.displot(data=df, x="出力", col="天气", hue="天气", bins=26,
palette=PALETTE3[:2], height=3.15, aspect=0.78, legend=False,
edgecolor="0.4", linewidth=0.3)
g.set_axis_labels("有功出力 " + IT["P"] + " / kW", "频次")
save_grid(g, "08_分布分面图", "08_分布分面图_按天气分面光伏",
left=0.14, bottom=0.21, right=0.97, top=0.84)
def dp_05():
"""按方案分面的效率分布。"""
fig, ax = new_fig(left=0.19)
fig.delaxes(ax)
rng = np.random.default_rng(805)
rows = []
for p, mu in [("方案 A", 0.872), ("方案 B", 0.889)]:
rows.append(pd.DataFrame({"效率": rng.normal(mu, 0.03, 800), "方案": p}))
df = pd.concat(rows, ignore_index=True)
g = sns.displot(data=df, x="效率", col="方案", hue="方案", kind="kde",
fill=True, palette=PALETTE3[:2], height=3.15, aspect=0.78,
legend=False)
g.set_axis_labels("系统综合效率 " + IT["eta"], "概率密度")
save_grid(g, "08_分布分面图", "08_分布分面图_按方案分面效率",
left=0.14, bottom=0.21, right=0.97, top=0.84)
说明
- axes 级图 1181×944 px;figure 级多轴图按内容取 1100~1470 px 宽。
- 图内不放标题,图题由本文件的标题承担。
- 数据为 10 kV 配网、380 V 低压、50 Hz 量级的仿真算例,随机种子固定。
浙公网安备 33010602011771号