
代码绘制成果展示


子图 (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, #xcolor='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], # ycolor='black', # 颜色linewidth=1.5) # 线宽# 区域分隔线ax_tab.axhline(4.5, # ycolor='black', # 颜色linewidth=2.0) # 线宽# 训练集文本ax_tab.text(0.175, # x2.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轴范围

第六部分

# =========================================================================================# ======================================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 # yX_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 # y8.定义特征变量:
X_features = df_rf_data.drop(columns=['Target']).values # x9.划分数据集:
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]}

推荐


获取方式
