如何将shap.plots.bar()图形添加至Matplotlib子图?
解决SHAP bar图添加到Matplotlib子图的问题
因为shap.plots.bar没有提供ax参数指定子图轴,但它默认会使用当前活跃的Matplotlib轴,所以可以通过手动切换当前轴的方式,把bar图绘制到指定子图中。
修改后的可运行示例代码如下:
import matplotlib.pyplot as plt import xgboost import shap fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(8,20)) # 枚举子图轴与对应数据集 for ax, (X, y) in zip(axes, [(x1, y1), (x2, y2)]): model = xgboost.XGBRegressor().fit(X, y) explainer = shap.Explainer(model, check_additivity=False) shap_values = explainer(X, check_additivity=False) # 将当前子图轴设为活跃轴 plt.sca(ax) # 绘制bar图并关闭自动显示 shap.plots.bar(shap_values, max_display=6, show=False) plt.show()
原理说明
plt.sca(ax)会把传入的子图轴设置为当前Matplotlib的活跃绘图轴,后续所有绘图操作都会绑定到这个轴上。- 加上
show=False参数,避免SHAP自动触发plt.show(),让我们可以统一在最后展示所有子图。
内容的提问来源于stack exchange,提问作者There
相关产品推荐
相关产品推荐

