当前位置:首页>python>期刊图片复现|Python绘制XGBoost+SHAP 特征贡献与偏依赖组合图

期刊图片复现|Python绘制XGBoost+SHAP 特征贡献与偏依赖组合图

  • 2026-10-11 05:33:57
期刊图片复现|Python绘制XGBoost+SHAP 特征贡献与偏依赖组合图

代码绘制成果展示

论文:How compound climate shocks reshape urban resilience and  scenario-adaptive pathways: New insights from the Yangtze River  Economic Belt
论文原图
此图通过XGBoost与SHAP分析绘制而成,旨在全面剖析模型特征对预测结果的影响机制。整体分为左右两块核心区域。左侧的子图 (a) 是全局特征重要性与蜂巢图的组图,其顶部X轴与柱状图代表通过计算所有样本SHAP绝对值均值得出的特征重要性,特征由下至上按重要性递增排序;底部X轴与散点则展示了每个样本在各个维度的具体SHAP值分布,并通过选定的渐变配色方案将散点颜色映射到原始特征数值的高低,同时顶部主标题嵌入了模型在测试集上的综合评估指标(R2、MAE、RMSE),黑色的0值垂直基准线用于直观区分正负向影响。右侧的区域 (b) 则提取了重要性排名前8的核心特征,绘制了特征偏依赖散点图,每张子图横坐标为特征的真实值,纵坐标为对应的SHAP边际贡献值;采用了LOWESS算法拟合出深灰色的非线性趋势线,并通过二阶导数精准定位了趋势的拐点(红点线,T),结合计算出的数据中位数(黑虚线,M),将这两个关键阈值动态标注在各个子图的空白处。画布最右侧生成的全局颜色条标注了特征值从Low到High的渐变逻辑。
仿图
多种配色

代码解释

第一部分

库的导入以及字体设置
# =========================================================================================# ====================================== 1. 库的导入 =========================================# =========================================================================================import pandas as pdimport numpy as npimport xgboost

第二部分

设置颜色库
# =========================================================================================# ====================================== 2.颜色库 =========================================# =========================================================================================COLOR_SCHEMES = {    1: 'coolwarm',}

第三部分

绘图函数:创建画布、网格分配与图例生成添加
# =========================================================================================# ======================================4.绘图函数=======================================# =========================================================================================def plot_shap_analysis(shap_values_obj, X_data, scheme_id, r2_val, mae_val, rmse_val):    scheme = COLOR_SCHEMES[scheme_id]  # 获取配色方案    #判断方案类型    if isinstance(scheme, list):        current_cmap = LinearSegmentedColormap.from_list(f'custom_{scheme_id}', scheme)  #创建自定义渐变色    else:        current_cmap = plt.get_cmap(scheme)  #内置的    #子图编号    fig.text(0.04,  #x             0.95,  #y             "(a)",  #文本             fontsize=18,  #字体大小             fontweight='bold')  #加粗    fig.text(0.85,  #x             0.95  #y             , "(b)",  #文本             fontsize=18,  #字体大小             fontweight='bold')  #加粗

第四部分

绘图函数:绘制SHAP蜂巢图及特征重要性条形图
    ax_main = fig.add_subplot(gs[:, :2])  #添加主子图    ax_main.set_yticks(range(len(feature_importance_df)))  #设置y轴刻度    #设置y轴标签    ax_main.set_yticklabels(feature_importance_df['feature'],#文本                            fontsize=16,  #字体大小                            fontweight='bold')  #加粗    bar_colors = current_cmap(np.linspace(0, 1, len(feature_importance_df)))  #条形图颜色    bar_colors[:, 3] = 0.45  #设置透明度    main_title = f"RI SHAP Analysis - Global\n$\\mathbf{{R^2={r2_val:.3f}}}$, $\\mathbf{{MAE={mae_val:.3f}}}$, $\\mathbf{{RMSE={rmse_val:.3f}}}$"    ax_main.set_ylim(-0.5, len(feature_importance_df) - 0.5)  #主轴y范围    ax_top.set_ylim(-0.5, len(feature_importance_df) - 0.5)  #顶轴y范围

第五部分

绘图函数:提取Top8特征并绘制偏依赖分析子图
    # 提取前8个特征    top_8_features = feature_importance_df['feature'].tail(8).iloc[::-1].tolist(    feature_idx = X_data.columns.get_loc(feature)  #获取索引    x_col_data = X_data[feature]  #x数据    y_col_data = shap_values_obj.values[:, feature_idx]  #y数据    #绘制y=0横线    ax.axhline(0,  #y                   color='darkgray',  #颜色                   linestyle='-',  #线型                   linewidth=2,  #宽                   zorder=1)  #层

第六部分

绘图函数:子图图内数值标注、全局颜色条创建与绘图结果保存
        x_span = x_col_data.max() - x_col_data.min()  #x跨度        ax.text(text_x,  #x                y_max - y_span * 0.15,  #y                f"M={m_str}",  #文本                color='black',  #颜色                fontweight='bold',  #加粗                fontsize=12)  #大小        ax.text(text_x,  #x                y_max - y_span * 0.35,  #y                f"T={t_str}",  #文本                color='red',  #颜色                fontweight='bold',  #加粗                fontsize=12)  #大小        #子图标题        ax.set_title(f"({i + 1}) {feature}",  #文本                     loc='left',  #左对齐                     fontsize=14,  #大小                     fontweight='bold',  #加粗                     pad=3)  #间距        #y轴标题        ax.set_ylabel("SHAP value",  #文本                      fontsize=12,  #大小                      fontweight='bold')  #加粗        #设置刻度        ax.tick_params(axis='both',  #轴                       which='major',  #刻度                       labelsize=11)  #标签大小        for spine in ax.spines.values():            spine.set_linewidth(2.5)  #线宽            spine.set_color('black')  #颜色

第七部分

执行部分:数据读取、模型构建、结果评估、shap分析、成果图绘制
# =========================================================================================# ======================================6.执行部分 =========================================# =========================================================================================if __name__ == "__main__":    excel_file_path = r'data.xlsx'    df = pd.read_excel(excel_file_path)  #读取数据    target_column = 'GST'  #目标    feature_columns = [col for col in df.columns if col != target_column]  #特征    print(f"训练集评估结果: R2={r2_train:.3f}, MAE={mae_train:.3f}, RMSE={rmse_train:.3f}")    print(f"测试集评估结果: R2={r2_test:.3f}, MAE={mae_test:.3f}, RMSE={rmse_test:.3f}")    explainer = shap.TreeExplainer(model)  #SHAP解释器    shap_values = explainer(X_test)  #测试集SHAP值    plot_shap_analysis(shap_values, X_test,scheme_id, r2_test, mae_test, rmse_test)

如何应用到你自己的数据

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

excel_file_path = r'data.xlsx'

2.设置目标数据,执行部分:

target_column = 'GST'  #目标

3.设置超参数,执行部分:

param_grid = {    'n_estimators': [100, 200],    'learning_rate': [0.05, 0.1],    'max_depth': [3, 5],}

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

plot_all = True

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

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重要性蜂巢图+单特征依赖图+交互效应强度气泡图+交互效应依赖图(回归+二分类+分类)

获取方式

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

最新文章

随机文章