当前位置:首页>python>期刊图片复现|Python绘制回归拟合散点图与误差分析图

期刊图片复现|Python绘制回归拟合散点图与误差分析图

  • 2026-09-08 22:39:49
期刊图片复现|Python绘制回归拟合散点图与误差分析图

代码绘制成果展示

论文:A transfer learning-driven paradigm for understanding cryogenic freezing  mechanisms in low water/binder cement-based composites
论文原图

子图 (a) - 训练集与测试集的数据分布图:该图通过直方图对比了数据集在随机划分(比例为 8:2)后的训练集与测试集的分布情况。纵轴表示目标变量,横轴表示样本频数。

子图 (b) - 预测值与真实值回归拟合散点图,误差统计图:此图直观展示了模型预测精度。横轴为真实值,纵轴为模型预测值 。图中大部分散点都紧密围绕在对角线附近,表明预测值与真实值高度契合 。图中还标注了10%和20%的误差线,绝大多数数据点均落在10%误差带内,只有极少数点落在该范围之外,这说明模型具有极高的预测精度 。误差统计图:该图从定量的角度评价了模型的稳定性。箱线图展示了测试集和训练集的误差百分比分布,大部分样本误差控制在10%以内 。

子图 (c) - 评估指标柱状图:展示了模型在测试集和训练集上的性能评估对比。图的左侧纵轴区域被粗黑实线划分为上下两大区块,分别对应test和train的评估结果,自上而下排列了四个回归任务评价指标:平均绝对误差(MAE)、均方根误差(RMSE)、均方误差(MSE)以及决定系数(R2)。图的右侧则是对应各指标数值的条形图。此外,训练集数值为交叉验证时均值,末端误差棒用以表示该评估指标的标准差或波动范围(反映了模型结果的稳定性)。

仿图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 环境设置 =======================================# =========================================================================================import pandas as pdimport matplotlib.pyplot as pltimport numpy as npimport matplotlib.gridspec as gridspec

第二部分

颜色库设置以及配色方案的选择与提取
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: {'#e4eff7', '#002060', '#f0984d','#f5b881', '#7a8e9e', '#729fa1', '#a2c6d4', '#f2aa9e'},}

第三部分

数据分布直方图绘制函数:主要用于绘制训练集与测试集目标变量直方图,用以直观展示和对比数据划分后的分布特征。
# =========================================================================================# ======================================3.数据分布直方图绘制函数=======================================# =========================================================================================def plot_back_to_back_histogram():    fig, ax = plt.subplots(figsize=(5, 6))    ax.set_facecolor(scheme['bg'])  # 坐标轴背景色    #绘制训练集水平条形图    ax.barh(bin_centers,  #y            -counts_train,  #取负,向左侧绘制            height=1,  # 条形的高度,宽            color=scheme['train'],  #填充色            alpha=0.7,  #透明度            edgecolor=scheme['train'],  #边缘            label='train',  #图例标签            zorder=2)  #层    #基准线    ax.axvline(0,  #x               color='black',  #颜色               linewidth=1.5,  #宽度               zorder=3)  #层    ax.set_yticks(yticks)  #应用y轴刻度    #设置y轴刻度标签    ax.set_yticklabels(yticks, fontsize=16, fontweight='bold')    ax.set_ylim(4, 28)  # y轴显示范围    legend = ax.legend(loc='upper right', prop={'weight': 'bold', 'size': 14})  #图例    legend.get_frame().set_edgecolor('black')  #图例边框颜色    legend.get_frame().set_linewidth(1.5)  #图例边框线宽

第四部分

散点图+误差箱线图绘制函数:主要用以展示预测精度和相对误差。
# =========================================================================================# ======================================4.散点图+误差箱线图绘制函数=======================================# =========================================================================================def plot_prediction_and_error():    #设定网格布局    gs = gridspec.GridSpec(1,  #行                           2,  #列                           width_ratios=[3.5, 1],  #左右宽度比例                           wspace=0.25)  #水平间距    ax1 = fig.add_subplot(gs[0])  #第一个子图    ax1.set_facecolor(scheme['bg'])  #设置背景色    #网格线    ax1.yaxis.grid(True,  #开启                   linestyle='--',  #样式                   color='lightgray',  #颜色                   alpha=1,  #透明度                   zorder=0)  #层    ax1.set_xlim(min_val, max_val)  #x轴范围    ax1.set_ylim(min_val, max_val)  #y轴范围    ticks_ax1 = [5, 10, 15, 20, 25, 30]  #x、y轴的刻度值    #应用    ax1.set_xticks(ticks_ax1)    ax1.set_yticks(ticks_ax1)    #设置刻度标注    ax1.set_xticklabels(ticks_ax1, fontsize=18, fontweight='bold')    ax1.set_yticklabels(ticks_ax1, fontsize=18, fontweight='bold')    #设置刻度线    ax1.tick_params(width=2, length=6)    ax1.set_xlabel('Experimental value (MPa)', fontsize=20, fontweight='bold')  #x轴标题    ax1.set_ylabel('Predicted value (MPa)', fontsize=20, fontweight='bold')  #y轴标题    # 创建右侧子图    ax2 = fig.add_subplot(gs[1])    ax2.set_facecolor(scheme['bg'])  #背景色    #网格线    ax2.yaxis.grid(True,  #开启                   linestyle='--',  #样式                   color='lightgray',  #颜色                   alpha=0.8,  #透明度                   zorder=0)  #层    #将刻度标签改为文本    ax2.set_xticklabels(['test', 'train'],  #文本                        fontsize=18,  #字体大小                        fontweight='bold',  #加粗                        rotation=-30)  #旋转    ax2.tick_params(width=2, length=6)  #刻度线    ax2.set_ylabel('Error (%)', fontsize=20, fontweight='bold', labelpad=-5)  #设置y轴标题

第五部分

评价指标数据图绘制函数:绘制了一个表格+带误差棒水平柱状图并置的混合图用来评价模型的四大核心回归指标。
# =========================================================================================# ======================================5.评价指标数据图绘制函数=======================================# =========================================================================================def plot_metrics_bar_chart():    # 收集到列表    values = [r2_tr, mse_tr, rmse_tr, mae_tr, r2_te, mse_te, rmse_te, mae_te]    y_pos = [1, 2, 3, 4, 5, 6, 7, 8]  # 每个条形的垂直y轴起始坐标数组    # 构建颜色列表,复用配色方案设定值    colors = [scheme['r2'], scheme['mse'], scheme['rmse'], scheme['mae']] * 2    # 画布    fig = plt.figure(figsize=(5, 6))    gs = gridspec.GridSpec(1, 2, width_ratios=[1, 2.5], wspace=0)  # 创建网格矩阵    for y in [1.5, 2.5, 3.5, 5.5, 6.5, 7.5]:        ax_tab.plot([0.35, 1],  # x                    [y, y],  # y                    color='black',  # 颜色                    linewidth=1.5)  # 线宽    # 区域分隔线    ax_tab.axhline(4.5,  # y                   color='black',  # 颜色                   linewidth=2.0)  # 线宽    # 训练集文本    ax_tab.text(0.175,  # x                2.5,  # y                'train',  # 文本                va='center',  # 垂直                ha='center',  # 水平                rotation=90,  # 旋转                fontweight='bold',  # 加粗    ax_bar = fig.add_subplot(gs[1])  # 右侧条形图    ax_bar.set_facecolor(scheme['bg'])  # 设置该坐标轴区域的背景色    ax_bar.set_ylim(0.5, 8.5)  # y轴范围    ax_bar.set_xlim(0, 4.5)  # x轴范围

第六部分

执行部分:包括数据的读取,数据集划分,实例化随机森林回归器,设定需遍历的超参数字典以及四种不同的评分标准。调用 GridSearchCV 进行 5 折交叉验证寻找最佳超参,并记录训练集的得分。在训练完毕后,从 grid_search.cv_results_ 字典中找到最优超参索引,据此提取各项训练指标在交叉验证期间的均值作为条形图的长度,标准差构建误差棒。由于测试集只需算单次的值因此给误差棒后方补了四个0。使用最佳模型对训练集和测试集分别进行预测。调用绘图函数绘图。
# =========================================================================================# ======================================7.执行部分=======================================# =========================================================================================if __name__ == '__main__':    local_data_path = r'data.xlsx'  # 原始数据路径    df_rf_data = pd.read_excel(local_data_path, sheet_name='RandomForest_Data')  # 读取    y_target = df_rf_data['Target'].values  # y    X_features = df_rf_data.drop(columns=['Target']).values  # x    # 划分数据集    X_train, X_test, y_train, y_test = train_test_split(X_features, y_target, test_size=0.2, random_state=42)    # 实例化模型    rf_model = RandomForestRegressor(random_state=42)    # 超参数网格    param_grid = {'n_estimators': [50, 100],                  'max_depth': [5, 10]}    # 定义多个评价指标    scoring_metrics = {        'r2': 'r2',        'mse': 'neg_mean_squared_error',        'rmse': 'neg_root_mean_squared_error',        'mae': 'neg_mean_absolute_error'    }    # 网格搜索    grid_search = GridSearchCV(        estimator=rf_model,        param_grid=param_grid,        cv=5,        scoring=scoring_metrics,        refit='r2',        n_jobs=-1,        return_train_score=True,        verbose=2,    )    # 最佳模型    best_model = grid_search.best_estimator_    # 预测    y_pred_train = best_model.predict(X_train)    y_pred_test = best_model.predict(X_test)

如何应用到你自己的数据

1.设置配色方案:

SCHEME_ID = 60  #要使用的配色方案

2.设置子图a保存地址:

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

3.设置子图b保存地址:

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

4.设置子图c保存地址:

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

5.设置组合图保存地址:

combined_img.save( fr'combined_plot_{scheme_id}.png', quality=95)

6.设置原始数据路径:

local_data_path = r'data.xlsx'  # 原始数据路径

7.定义目标变量:

y_target = df_rf_data['Target'].values  # y

8.定义特征变量:

X_features = df_rf_data.drop(columns=['Target']).values  # x

9.划分数据集:

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

10.设置超参数网格:

param_grid = {'n_estimators': [50, 100],              'max_depth': [5, 10]}

推荐

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

获取方式

公众号中的所有所有的免费代码都已经下架了,都并入到付费部分里了,付费合集代码和数据的购买通道已经开通,全部合集100元,后续将会持续更新,决定购买请后台私信我,注意只会分享练习数据和代码文件,不会提供答疑服务,代码文件中已经包含了每行代码的完整注释,购买前请确保真的需要!!!

最新文章

随机文章