You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 07:10:56