You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在水平条形图上绘制匹配年份范围的线性回归线

问题原因

你当前训练模型时将S_scores作为自变量、Years作为因变量,绘图时又直接传入原始的S_scores作为x轴输入,导致回归线只能覆盖现有数据对应的年份区间,无法覆盖2000-2020的完整Y轴范围。

修改方案

调整模型训练的自变量与因变量方向,用年份作为输入预测对应S_scores,再生成2000-2020的连续年份序列计算预测值即可,仅需修改两处代码:

  1. 修改模型训练逻辑:
lr = Ridge()
# 调整为用年份预测S_scores
lr.fit(regression_STS[['Years']], regression_STS['S_scores'])
  1. 替换原回归线绘制代码:
# 生成2000到2020的连续年份序列,共100个点保证线条平滑
y_range = np.linspace(2000, 2020, 100)
# 预测对应年份的S_scores作为x轴坐标
x_pred = lr.predict(y_range.reshape(-1, 1))
# 绘制覆盖全Y轴区间的回归线
axes[0].plot(x_pred, y_range, color='orange')

如果你不想修改原模型的训练方向,也可以直接通过现有模型的参数反向计算对应年份的S_scores:

y_range = np.linspace(2000, 2020, 100)
# 从现有模型(Years = coef * S_scores + intercept)反向推导S_scores
x_pred = (y_range - lr.intercept_) / lr.coef_[0]
axes[0].plot(x_pred, y_range, color='orange')

修改后完整代码

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import Ridge

# 假设你的Years、S_scores、S_presidents变量已提前定义
regression_STS = pd.DataFrame({
    "Years": Years,
    "S_scores": S_scores
})

lr = Ridge()
# 调整训练方向:用年份预测S_scores
lr.fit(regression_STS[['Years']], regression_STS['S_scores'])

# 绘图部分
fig, axes = plt.subplots(nrows=1, ncols=2, sharey=False, sharex=False)
S = axes[0].barh(Years, S_scores, align='center', color=np.where(S_scores < 0, 'red', 'green'))
axes[0].set(title='S Score')
axes[0].set_xlim(-40, 80)

# 替换后的回归线绘制代码
y_range = np.linspace(2000, 2020, 100)
x_pred = lr.predict(y_range.reshape(-1, 1))
axes[0].plot(x_pred, y_range, color='orange')

rects1 = S.patches
for rect, label in zip(S, S_presidents):
    width = rect.get_width() + 2
    label_y_pos = rect.get_y() + rect.get_height() / 2
    axes[0].text(width, label_y_pos, s=label, color='blue')

内容的提问来源于stack exchange,提问作者zepcron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:15:02