如何将SHAP summary_plot保存为本地图片文件?
解决SHAP summary_plot保存空图的问题
出现空图的核心原因是shap.summary_plot()默认会自动调用plt.show(),该操作会关闭并清空当前的绘图上下文,导致后续执行plt.savefig()时没有可保存的内容。以下是两种正确的保存方法:
方法一:禁用自动显示,先保存再按需显示
调用summary_plot时传入show=False参数,阻止其自动触发plt.show(),随后直接保存图片,最后可手动调用plt.show()查看图表:
import shap import matplotlib.pyplot as plt # 假设已完成模型训练与SHAP值计算 # explainer = shap.GradientExplainer(model, X_train) # shap_values = explainer.shap_values(X_test) # 生成摘要图但不自动显示 shap.summary_plot(shap_values, X_test, show=False) # 保存图片,bbox_inches='tight'可避免标签被截断 plt.savefig('shap_summary_plot.png', dpi=300, bbox_inches='tight') # 可选:手动显示图表 plt.show()
方法二:在自动显示前保存
如果不想修改summary_plot的参数,需要确保在plt.show()执行前完成保存操作:
import shap import matplotlib.pyplot as plt # 生成摘要图(此时还未执行plt.show()) shap.summary_plot(shap_values, X_test) # 立即保存图片 plt.savefig('shap_summary_plot.png', dpi=300, bbox_inches='tight') # 再执行显示操作 plt.show()
额外注意事项
- 如果模型是多输出类型,
shap_values会是一个列表,此时需要指定class_id参数聚焦特定输出的解释结果,避免绘图异常。 - 保存时建议设置
dpi参数提高图片分辨率,bbox_inches='tight'可防止坐标轴标签或标题被截断。
内容的提问来源于stack exchange,提问作者Pitone
相关产品推荐
相关产品推荐

