
代码绘制成果展示












代码解释


第一部分

# =========================================================================================# ====================================== 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.05limit_max = max_val + val_range * 0.05x_vals = np.linspace(limit_min, limit_max, 100) # 对角线x数据lower_bound = x_vals - np.abs(x_vals) * 0.2upper_bound = x_vals + np.abs(x_vals) * 0.2

第四部分

# 绘制误差带ax_main.fill_between(x_vals, # xlower_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 # yX_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 = True6.设置绘图结果的保存地址,主绘图函数部分:
plt.savefig(fr'Scheme_{scheme_id}.png', dpi=300,bbox_inches='tight')
往期内容


获取方式
