当前位置:首页>python>期刊图片复现|Python绘制回归拟合图+频率直方图+残差图组合图

期刊图片复现|Python绘制回归拟合图+频率直方图+残差图组合图

  • 2026-10-11 06:58:30
期刊图片复现|Python绘制回归拟合图+频率直方图+残差图组合图

代码绘制成果展示

论文:Prediction of maximum impact displacement of reinforced concrete  columns based on interpretable machine learning
论文原图
此图评估了RF、AdaBoost、GBRT和XGBoost四种机器学习回归模型的预测性能,每个子图内部均采用了高度集成的多视图布局。在每个子图的核心主图中,横坐标表示真实测量值,纵坐标表示模型预测值,图中的黑色实心对角线代表绝对完美的预测基准,其两侧带有“+20%”和“-20%”红色标记的灰色阴影区域划定了20%的预测误差容忍带;主图内的散点按右下角图例分为深紫色和浅蓝色直观展示了数据点在基准线周围的拟合聚集程度,而主图左上角的文本框则量化列出了该模型在测试集上的核心性能指标(R2、RMSE、MAE等)。上方和右侧分别设置了边缘堆积直方图,用于直观呈现真实值与模型预测值的数据频次分布情况。主图左侧是一个残差分析模块,其横坐标为残差值,图中心处的黑色垂直线代表零误差基准,灰色垂直阴影区域标示了主要的残差分布界限,主要用于观察预测误差随预测值大小变化的波动特征及离散程度;而该残差散点图正上方的小型堆积直方图则进一步描绘了整体残差数据的统计频率分布,用以检验误差是否趋于0并符合正态分布。
仿图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport matplotlib.gridspec as gridspecfrom sklearn.model_selection import train_test_split, GridSearchCVfrom sklearn.preprocessing import StandardScaler

第二部分

设置颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ('#7e7aa2', '#d0e8e9'),}

第三部分

子图绘制函数:创建画布,网格布局初始化与数据边界计算
# =========================================================================================# ======================================3.子图绘制函数=======================================# =========================================================================================def draw_exact_panel(fig, gs, title, m_train, p_train, m_test, p_test, scheme_id, metrics_text=""):    color_train, color_test = COLOR_SCHEMES.get(scheme_id, COLOR_SCHEMES[1])  # 获取配色方案    res_train = p_train - m_train  # 训练集残差    res_test = p_test - m_test  # 测试集残差    # 设定坐标轴的上下界限    limit_min = min_val - val_range * 0.05    limit_max = max_val + val_range * 0.05    x_vals = np.linspace(limit_min, limit_max, 100)  # 对角线x数据    lower_bound = x_vals - np.abs(x_vals) * 0.2    upper_bound = x_vals + np.abs(x_vals) * 0.2

第四部分

子图绘制函数:散点图部分绘制
    # 绘制误差带    ax_main.fill_between(x_vals,  # x                         lower_bound,  # 下界限                         upper_bound,  # 上界限                         color='gray',  # 颜色                         alpha=0.3,  # 透明度                         zorder=1)  # 层    # 轴范围    ax_main.set_xlim(limit_min, limit_max)    ax_main.set_ylim(limit_min, limit_max)

第五部分

子图绘制函数:绘制主图边缘分布直方图
    # 顶部直方图    ax_top = fig.add_subplot(inner_gs[0, 2], sharex=ax_main)    # 绘制顶部直方图    ax_top.hist([m_test, m_train],  # 数据                bins=15,  # 分箱数                stacked=True,  # 堆叠                color=[color_test, color_train],  # 颜色                edgecolor='black')  # 边框颜色    ax_right.set_xlabel('Count', fontsize=9)  # X轴标题    ax_right.xaxis.set_label_position('top')  # 置顶

第六部分

子图绘制函数:左侧残差图绘制
    # 左侧残差图    ax_left = fig.add_subplot(inner_gs[1, 0], sharey=ax_main)    ax_left.set_xlim(-res_limit, res_limit)  # x轴范围    ax_left.set_xlabel('Residuals [mm]', fontsize=11)  # x轴标题    ax_left.tick_params(labelsize=8)  # 刻度标注字号    ax_top_left.set_ylabel('Count', fontsize=9)  # Y轴标题    ax_top_left.tick_params(labelbottom=False, labelsize=8)  # 隐藏底部刻度    # 网格线    ax_top_left.grid(True,  # 开启                     axis='x',  # 轴                     linestyle='--',  # 虚线                     alpha=0.8)  # 透明度

第七部分

执行部分:包括数据读取、划分、标准化处理、模型配置、网格搜索、预测、结果评估、绘图执行等
# =========================================================================================# ======================================5.执行部分=======================================# =========================================================================================if __name__ == '__main__':    df_raw = pd.read_excel(r'F:\素材\20260512-回归拟合图+频率直方图+残差图组合图\data.xlsx')  # 读取数据    y_target = df_raw['Measures'].values  # y    X_features = df_raw.drop(columns=['Measures']).values  # x        # 预测        p_train = best_model.predict(X_train_scaled)        p_test = best_model.predict(X_test_scaled)        results_dict[model_name] = {            'm_train': y_train, 'p_train': p_train,            'm_test': y_test, 'p_test': p_test,            'metrics_text': metrics_text        }

如何应用到你自己的数据

1.设置原始数据的保存路径,执行部分:

df_raw = pd.read_excel(r'\data.xlsx')  # 读取数据

2.读取数据,执行部分:

y_target = df_raw['Measures'].values  # yX_features = df_raw.drop(columns=['Measures']).values  # x

3.划分数据集,执行部分:

X_train, X_test, y_train, y_test = train_test_split(X_features, y_target, test_size=0.2, random_state=42)

4.配置模型,执行部分:

models_config = {    "(a) RF": {        "estimator": RandomForestRegressor(random_state=42),        "param_grid": {'n_estimators': [50, 100], 'max_depth': [5, 10, None]}    },    "(b) AdaBoost": {        "estimator": AdaBoostRegressor(random_state=42),        "param_grid": {'n_estimators': [50, 100], 'learning_rate': [0.01, 0.1, 1.0]}    },    "(c) GBRT": {        "estimator": GradientBoostingRegressor(random_state=42),        "param_grid": {'n_estimators': [50, 100], 'learning_rate': [0.05, 0.1], 'max_depth': [3, 5]}    },    "(d) XGBoost": {        "estimator": XGBRegressor(random_state=42, objective='reg:squarederror'),        "param_grid": {'n_estimators': [50, 100], 'learning_rate': [0.05, 0.1], 'max_depth': [3, 5]}    }}

5.设置是否进行批量绘图,执行部分:

plot_all = True

6.设置绘图结果的保存地址,主绘图函数部分:

plt.savefig(fr'Scheme_{scheme_id}.png', dpi=300,bbox_inches='tight')

往期内容

期刊图片复现|Python绘制二维偏依赖PDP图
期刊复现|python绘制基于SHAP分析和GAM模型拟合的单特征依赖图
期刊图片复现|python绘制带有渐变颜色shap特征重要性组合图(条形图+蜂巢图)
期刊复现|用Python绘制SHAP特征重要性总览图、依赖图、双特征交互效应SHAP图,解锁XGBoost模型的终极奥秘
期刊图片复现|Python绘制shap重要性蜂巢图+单特征依赖图+交互效应强度气泡图+交互效应依赖图(回归+二分类+分类)

获取方式

公众号中目前包含近300篇代码+数据+参考论文,后续将会持续更新,需要请后台私信我,注意只会分享练习数据、参考论文和代码文件,仅提供有关代码的答疑,不会提供其他答疑服务,代码文件中已经包含了每行代码的完整注释!!!

最新文章

随机文章