当前位置:首页>python>期刊图片复现|Python绘制极坐标shap蜂巢图

期刊图片复现|Python绘制极坐标shap蜂巢图

  • 2026-10-11 05:48:27
期刊图片复现|Python绘制极坐标shap蜂巢图

代码绘制成果展示

论文:Coupling coordination between oasis water resilience and water ecosystem  services under different water supply modes: Evidence from southern  Xinjiang, Hexi corridor, and Hetao plain, China
论文原图
这张极坐标SHAP值蜂巢图旨在同时展现机器学习模型中各个特征的重要性及其样本层面的具体影响机制。图中心是一个呈阶梯状递减的环形柱状图,按照顺时针方向直观展示了各个特征的全局重要性占比,清晰地揭示了模型的关键驱动因素。从中心向外围辐射的灰色实线构成了每个特征的SHAP值数值轴,贯穿所有轴线的灰色虚线圆圈则代表了SHAP值为0的基准参考线,即特征对模型预测结果无影响的平衡状态。散布在各条轴线上的密集散点代表了数据集中的一个个真实样本,散点沿着轴线向外围偏离基准线意味着该特征对模型预测值有正向的拉升作用,向内圈靠拢则表示具有负向的抑制作用,而散点在切线方向上的横向抖动宽度则反映了数据在该SHAP值区间的分布密度。图表底部的渐变颜色条为散点赋予了原始特征数值大小的颜色映射。
仿图
多种配色

代码解释

第一部分

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

第二部分

设置颜色库
# =========================================================================================# ======================================2.颜色库=======================================# =========================================================================================COLOR_SCHEMES = {    1: ['#FFB3BA', '#FFDFBA', '#FFFFBA', '#BAFFC9', '#BAE1FF', '#D3B5E5', '#FFC4E1'],}

第三部分

绘图函数:数据准备与极坐标画布初始化
# =========================================================================================# ======================================4.绘图函数=======================================# =========================================================================================def plot_advanced_forest_chart(plot_data, scheme_id):    features = plot_data['features']  # 特征名称    percentages = plot_data['percentages']  # 特征重要性百分占比    ax.spines['polar'].set_visible(False)  # 去掉边框    ax.grid(False)  # 去掉网格线    pie_colors = COLOR_SCHEMES[scheme_id]  # 获取颜色    #生成渐变色    cmap = mcolors.LinearSegmentedColormap.from_list(f'cmap_{scheme_id}', pie_colors)

第四部分

绘图函数:绘制中心柱状图及文本标注
    bar_bottom = 0.15  # 柱状图起始内径    max_height = 0.4  # 最高柱子高度    min_height = 0.15  # 最低柱子高度    bar_heights = np.linspace(max_height, min_height, num_features)  # 生成柱高数组        ax.text(angle,  # 角度                bar_bottom + bh + 0.05,  # 半径                f"{pct:.1f}%",  # 格式化文本                ha='center',  # 水平                va='center',  # 垂直                fontweight='bold',  # 加粗                fontsize=12)  # 字体大小

第五部分

绘图函数:绘制参考线、特征轴及SHAP抖动散点
    r_zero = 0.8  # shap0值圆圈半径    theta_circle = np.linspace(0, 2 * np.pi, 200)  # 生成圆角度序列    # 绘制参考线    ax.plot(theta_circle,  # 角度            [r_zero] * 200,  # 半径            linestyle='--',  # 虚线            color='gray',  # 灰色        # 散点抖动设置        jitter = simple_beeswarm(sv_scaled, nbins=50, width=0.07)        theta_points = angle + jitter  # 散点角度        # 绘制抖动散点        ax.scatter(theta_points,  # 角度                   r_points,  # 半径                   c=fv,  # 颜色映射依据                   cmap=cmap,  # 配色                   s=12,  # 散点大小                   alpha=0.8,  # 透明度                   zorder=10,  # 层                   edgecolors='none')  # 散点边缘线

第六部分

绘图函数:添加颜色条及保存绘图结果
    # 颜色条轴添加    cbar_ax = fig.add_axes([0.15,  # 左                            0.05,  # 下                            0.7,  # 长                            0.015])  # 高    norm = Normalize(vmin=0, vmax=1)  # 颜色条范围    sm = ScalarMappable(cmap=cmap, norm=norm)  # 颜色条映射对象    # 绘制颜色条    cbar = plt.colorbar(sm,  # 对象                        cax=cbar_ax,  # 轴                        orientation='horizontal')  # 水平    cbar.set_ticks([0, 1])  # 刻度位置    # 设置刻度标注    cbar.set_ticklabels(['Low', 'High'],  # 刻度文本                        fontsize=16,  # 大小                        fontweight='bold')  # 加粗    # 设置颜色条轴标题    cbar.set_label('Feature value',  # 文本                   fontsize=16,  # 大小                   fontweight='bold')  # 加粗    cbar.outline.set_linewidth(1.5)  # 边框线宽

第七部分

执行部分:包括数据预处理与模型训练、SHAP值解释与排序、数据打包与绘图
# =========================================================================================# ======================================5.执行部分=======================================# =========================================================================================if __name__ == '__main__':    df = pd.read_excel( r'data.xlsx')  #读取数据    X = df.drop(columns=['Target'])  #x    y = df['Target']  #y    #划分数据集    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)    model = xgb.XGBRegressor(random_state=42)  # 实例化模型    feat_vals_norm = (feat_vals_sorted - feat_vals_sorted.min(axis=0)) / (feat_vals_sorted.max(axis=0) - feat_vals_sorted.min(axis=0))    #打包数据    df_real = {        'features': features_sorted,        'percentages': pct_sorted,        'shap_vals': shap_vals_sorted,        'feat_vals': feat_vals_norm    }    #是否批量绘图    plot_all = True    if plot_all:        for scheme_id in COLOR_SCHEMES.keys():            print('正在绘制并保存方案:', scheme_id)            plot_advanced_forest_chart(df_real, scheme_id)    else:        scheme_id = 1        print('正在绘制并保存方案:', scheme_id)        plot_advanced_forest_chart(df_real, scheme_id)

如何应用到你自己的数据

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

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

2.读取特征数据和目标数据,执行部分:

X = df.drop(columns=['Target'])  #xy = df['Target']  #y

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

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

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

获取方式

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

最新文章

随机文章