我正在尝试从shap
包中绘制依赖关系图的网格。这是我想要的示例的MWE代码:
fig, axs = plt.subplots(2,8, figsize=(16, 4), facecolor='w', edgecolor='k') # figsize=(width, height)
fig.subplots_adjust(hspace = .5, wspace=.001)
axs = axs.ravel()
for i in range(10):
axs[i].contourf(np.random.rand(12,12),5,cmap=plt.cm.Oranges)
axs[i].set_title(str(250+i))
plt.show()
这是我到目前为止的代码。有些事情不起作用:
figsize
参数不会影响网格的图形大小fig, axs = plt.subplots(1,8, figsize=(4, 2))
axs = axs.ravel()
for b in X_test.columns[:3]:
for a in X_test.columns[:3]:
shap.dependence_plot((a, b), shap_interaction_values, X_test)
答案 0 :(得分:3)
import shap
import matplotlib.pyplot as plt
X = ...
shap_values = ...
columns = X.columns
# adjust nrows, ncols to fit all your columns
fig, axes = plt.subplots(nrows=4, ncols=3, figsize=(20, 14))
axes = axes.ravel()
for i, col in enumerate(columns):
shap.dependence_plot(col, shap_values, X, ax=axes[i], show=False)
答案 1 :(得分:0)
我和您有同样的问题-code说Dependency_plot带有一个可选参数:ax
因此,您可以创建子图并将其后的图放入其中:
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2)
shap.dependence_plot((a, b), shap_interaction_values, X_test, ax=ax1)
shap.dependence_plot((a, b), shap_interaction_values, X_test, ax=ax2)
您可以将zip()
的轴和列一起使用。
在使用interaction_index
的情况下,我还没有解决该怎么办-在这种情况下,您会在图形的末尾看到所有可能的interact_indexes热图,这看起来非常糟糕。
编辑:丑陋的骇客,但它似乎能解决问题-如果您为每个dependency_plots指定interaction_index,则它将为每个图绘制一个颜色条,进入最后一个子图,看上去很糟糕。
我最终手动删除了轴(每个颜色条是一个附加轴),然后自动重新调整了子图:
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, constrained_layout=True)
shap.dependence_plot((a, b), shap_interaction_values, X_test, ax=ax1)
shap.dependence_plot((a, b), shap_interaction_values, X_test, ax=ax2)
fig.axes[-1].remove()
fig.axes[-1].remove()
这将消除所有所有颜色条,并且constrained_layout = True将确保正确重绘最后一个子图,如果没有此参数,它将保持“压缩”状态以为不存在的颜色条留出空间