首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SHAP图的变长宽比

SHAP图的变长宽比
EN

Stack Overflow用户
提问于 2021-09-28 04:10:44
回答 1查看 3.7K关注 0票数 2

我想改变从shap库生成的地块的高宽比。

下面是最小可复制示例图:

代码语言:javascript
运行
复制
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)
shap.summary_plot(shap_values, X)

我可以使用以下方法保存这个数字:

代码语言:javascript
运行
复制
fig = shap.summary_plot(shap_values, X, show = False)
plt.savefig('fig_tes1.svg', bbox_inches='tight',dpi=100)

但是我无法改变高宽比,例如,它的宽与高的比例是4:3。

我读到我应该能

代码语言:javascript
运行
复制
plt.gcf()

但对我来说,这只是创造了一个新的空白的情节。

代码语言:javascript
运行
复制
<Figure size 432x288 with 0 Axes>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-28 04:34:47

更新

使用plot_size参数:

代码语言:javascript
运行
复制
shap.summary_plot(shap_values, X, plot_size=[8,6])
print(f'Size: {plt.gcf().get_size_inches()}')

# Output
Size: [8. 6.]

可以使用set_size_inches修改图形的大小。

代码语言:javascript
运行
复制
...
shap.summary_plot(shap_values, X)

# Add this code
print(f'Original size: {plt.gcf().get_size_inches()}')
w, _ = plt.gcf().get_size_inches()
plt.gcf().set_size_inches(w, w*3/4)
plt.tight_layout()
print(f'New size: {plt.gcf().get_size_inches()}')

plt.savefig('fig_tes1.svg', bbox_inches='tight',dpi=100)

输出:

代码语言:javascript
运行
复制
Original size: [8.  6.7]
New size: [8. 6.]

Note:修改宽度可能比修改高度更好:

代码语言:javascript
运行
复制
_, h = plt.gcf().get_size_inches()
plt.gcf().set_size_inches(h*4/3, h)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69355710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档