如何调整shap库生成可视化图像的宽高比
调整SHAP库生成图像宽高比的解决方法
你调用plt.gcf()生成空白画布是因为调用时机不对,需要先让SHAP完成绘图操作,再获取当前画布对象调整尺寸,或者提前创建指定比例的画布供SHAP绘图使用,以下是两种可直接运行的方案:
方法1:提前创建指定比例的画布(推荐)
在调用shap.summary_plot之前先初始化符合4:3比例的画布,SHAP会直接在该画布上绘制内容,无需后续调整:
import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression from sklearn.datasets import load_boston import shap boston = load_boston() regr = pd.DataFrame(boston.data) regr.columns = boston.feature_names regr['MEDV'] = boston.target X = regr.drop('MEDV', axis = 1) Y = regr['MEDV'] fit = LinearRegression().fit(X, Y) explainer = shap.LinearExplainer(fit, X, feature_dependence = 'independent') shap_values = explainer.shap_values(X) # 初始化画布,figsize参数传入(宽, 高),单位为英寸,8:6=4:3,可按需求等比缩放数值 plt.figure(figsize=(8, 6)) # 绘图时关闭show参数 shap.summary_plot(shap_values, X, show=False) # 保存图像 plt.savefig('fig_tes1.svg', bbox_inches='tight', dpi=100) # 关闭画布避免残留 plt.close()
方法2:绘图后调整画布比例
如果你需要在SHAP绘图完成后再调整尺寸,按以下顺序操作即可,不会出现空白画布问题:
# 先完成SHAP绘图,关闭show shap.summary_plot(shap_values, X, show=False) # 获取当前已绘制内容的画布对象 fig = plt.gcf() # 调整为4:3的宽高比,例如宽10英寸、高7.5英寸 fig.set_size_inches(10, 7.5) # 保存图像 plt.savefig('fig_tes1.svg', bbox_inches='tight', dpi=100) plt.close()
注意事项
- 不要在调用SHAP绘图函数之前执行
plt.gcf(),此时当前画布没有任何绘制内容,就会返回你遇到的空白画布结果 figsize的宽高数值可按需求缩放,只要宽高比值为4/3即可符合要求
内容的提问来源于stack exchange,提问作者Jeremy K.
相关产品推荐
相关产品推荐

