如何将SHAP Waterfall图与Bar图作为Matplotlib子图并排展示?
解决SHAP Waterfall图与Bar图并排显示重叠的问题
问题根源
SHAP的shap.plots.waterfall()函数不支持通过ax参数指定绘图轴,它会默认创建新的绘图轴对象。你之前的代码中尝试将该函数的返回值赋值给ax0,这会覆盖掉plt.subplots()创建的原始轴,导致Waterfall图抢占Bar图的轴区域,原始ax0空置。
修正后的代码
import matplotlib.pyplot as plt import shap def shap_diagrams(shapley_values, index=0): # 创建1行2列的子图布局 fig = plt.figure(figsize=(10, 5)) # 绘制Waterfall图:通过subplot指定子图位置 plt.subplot(1, 2, 1) shap.plots.waterfall(shapley_values[index], show=False) plt.title('SHAP Waterfall Plot') # 绘制Bar图:直接指定ax参数 ax1 = plt.subplot(1, 2, 2) shap.plots.bar(shapley_values, ax=ax1, show=False) ax1.set_title('SHAP Bar Plot') # 调整子图间距,避免重叠 plt.tight_layout() plt.show()
关键调整点
- 放弃直接通过
ax0赋值的方式,改用plt.subplot(1,2,1)指定第一个子图位置,让Waterfall图绘制在该区域内 - Bar图保持通过
ax参数指定轴的方式,确保绘制在第二个子图区域 - 添加
plt.tight_layout()自动调整子图间距,避免标题、标签等元素重叠
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

