18 回归图 regplot
18 回归图 regplot
这类图是什么
散点 + 回归线 + bootstrap 置信带,order 可拟合多项式。
看什么:看两量的平均趋势与不确定性,非线性关系用 order 指定。
5 个案例
18-1 变压器负载率与效率的回归:带 bootstrap 置信带
regplot 自动拟合直线并给出 95% 置信带,带宽反映拟合的不确定性;散点已足够说明形状时,这条线给出的是"平均趋势"而非预测区间。

18-2 气温与负荷的线性回归:斜率即温度敏感度

18-3 辐照度与光伏出力的回归:过原点附近的线性关系

18-4 风速与风电出力的二次回归:捕捉功率曲线的非线性
order=2 拟合二次曲线,能体现"低风速立方增长、高风速趋于饱和"的功率特性,直线拟合会同时低估中段、高估两端。

18-5 转速与转矩的回归:机械特性曲线

代码
5 个函数取自 code/第四批_回归与矩阵261107.py。关键约束:不调用 sns.set_theme(),否则 font.family 被改成 Arial,中文会变方框;版式由 code/公共配置261107.py 里的 setup_cn_style() 与 save() / save_grid() 统一接管。
# 摘自 code/第四批_回归与矩阵261107.py
def rp_01():
"""变压器负载率与效率的回归:带 bootstrap 置信带。
regplot 自动拟合直线并给出 95% 置信带,带宽反映拟合的不确定性;
散点已足够说明形状时,这条线给出的是"平均趋势"而非预测区间。
"""
fig, ax = new_fig(left=0.19)
rng = np.random.default_rng(1801)
b = rng.uniform(0.15, 1.0, 140)
eta = 98.4 - 1.5 * (1 - b) ** 1.4 - 0.5 * b ** 2 + rng.normal(0, 0.07, 140)
df = pd.DataFrame({"负载率": b, "效率": eta})
sns.regplot(data=df, x="负载率", y="效率", ax=ax, color=C1,
scatter_kws={"s": 16, "edgecolor": "white", "linewidths": 0.3},
line_kws={"lw": 1.1})
ax.set_xlabel("负载率 " + IT["beta"])
ax.set_ylabel("效率 " + IT["eta"] + " / %")
ax.set_xlim(0.05, 1.06)
ax.margins(y=0.16)
save(fig, "18_回归图", "18_回归图_负载率与效率")
def rp_02():
"""气温与负荷的线性回归:斜率即温度敏感度。"""
fig, ax = new_fig(left=0.19)
rng = np.random.default_rng(1802)
t = rng.normal(28, 8, 160)
p = 380 + 9.5 * (t - 20) + rng.normal(0, 52, 160)
df = pd.DataFrame({"气温": t, "负荷": p})
sns.regplot(data=df, x="气温", y="负荷", ax=ax, color=C3,
scatter_kws={"s": 16, "edgecolor": "white", "linewidths": 0.3},
line_kws={"lw": 1.1})
ax.set_xlabel("气温 " + IT["T"] + " / °C")
ax.set_ylabel("有功负荷 " + IT["P"] + " / kW")
ax.set_xlim(0, 50)
ax.margins(y=0.16)
save(fig, "18_回归图", "18_回归图_气温与负荷")
def rp_03():
"""辐照度与光伏出力的回归:过原点附近的线性关系。"""
fig, ax = new_fig(left=0.19)
rng = np.random.default_rng(1803)
g = rng.uniform(0, 1050, 170)
p = 0.90 * g + rng.normal(0, 20, 170)
df = pd.DataFrame({"辐照度": g, "出力": p})
sns.regplot(data=df, x="辐照度", y="出力", ax=ax, color=C3,
scatter_kws={"s": 15, "edgecolor": "white", "linewidths": 0.3},
line_kws={"lw": 1.1})
ax.set_xlabel("辐照度 " + IT["G"] + " / (W/m²)")
ax.set_ylabel("有功出力 " + IT["P"] + " / kW")
ax.set_xlim(-30, 1080)
ax.margins(y=0.14)
save(fig, "18_回归图", "18_回归图_辐照度与出力")
def rp_04():
"""风速与风电出力的二次回归:捕捉功率曲线的非线性。
order=2 拟合二次曲线,能体现"低风速立方增长、高风速趋于饱和"的功率特性,
直线拟合会同时低估中段、高估两端。
"""
fig, ax = new_fig(left=0.19)
rng = np.random.default_rng(1804)
v = rng.uniform(2, 18, 180)
p = np.clip(0.42 * v ** 3, 0, 1650) + rng.normal(0, 90, 180)
df = pd.DataFrame({"风速": v, "出力": np.clip(p, 0, None)})
sns.regplot(data=df, x="风速", y="出力", ax=ax, color=C1, order=2,
scatter_kws={"s": 14, "edgecolor": "white"},
line_kws={"lw": 1.1})
ax.set_xlabel("风速 " + IT["v"] + " / (m/s)")
ax.set_ylabel("风电出力 " + IT["P"] + " / kW")
ax.set_xlim(0, 20)
ax.margins(y=0.16)
save(fig, "18_回归图", "18_回归图_风速与出力")
def rp_05():
"""转速与转矩的回归:机械特性曲线。"""
fig, ax = new_fig(left=0.19)
rng = np.random.default_rng(1805)
n = rng.uniform(400, 1480, 150)
tq = 2.1 * (1 - ((n - 1450) / 700) ** 2) + rng.normal(0, 0.04, 150)
df = pd.DataFrame({"转速": n, "转矩": tq})
sns.regplot(data=df, x="转速", y="转矩", ax=ax, color=C1, order=2,
scatter_kws={"s": 15, "edgecolor": "white", "linewidths": 0.3},
line_kws={"lw": 1.1})
ax.set_xlabel("转速 " + IT["n"] + " / (r/min)")
ax.set_ylabel("电磁转矩 " + IT["T"] + " / (N·m)")
ax.set_xlim(350, 1550)
ax.margins(y=0.18)
save(fig, "18_回归图", "18_回归图_转速与转矩")
说明
- axes 级图 1181×944 px;figure 级多轴图按内容取 1100~1470 px 宽。
- 图内不放标题,图题由本文件的标题承担。
- 数据为 10 kV 配网、380 V 低压、50 Hz 量级的仿真算例,随机种子固定。

浙公网安备 33010602011771号