
代码绘制成果展示












代码解释


第一部分

# =========================================================================================# ====================================== 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) # 字体大小

第五部分

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) # 边框线宽

第七部分

# =========================================================================================# ======================================5.执行部分=======================================# =========================================================================================if __name__ == '__main__':df = pd.read_excel( r'data.xlsx') #读取数据X = df.drop(columns=['Target']) #xy = 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 = Trueif plot_all:for scheme_id in COLOR_SCHEMES.keys():print('正在绘制并保存方案:', scheme_id)plot_advanced_forest_chart(df_real, scheme_id)else:scheme_id = 1print('正在绘制并保存方案:', 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 = True5.设置绘图结果的保存地址,绘图函数部分:
plt.savefig(fr'scheme_{scheme_id}.png', dpi=300, bbox_inches='tight')
推荐


获取方式
