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 量级的仿真算例,随机种子固定。
posted on 2026-11-08 00:13  小青蛙电气  阅读(2)  评论(0)    收藏  举报