如何使用 Matplotlib 为 shap.plots.force 的绘图添加标题?

How to add title to the plot of shap.plots.force with Matplotlib?

我想使用 Matplotlib 对我的力图(由 shap.plots.force 创建)添加一些修改,例如添加标题,使用紧凑的布局等。但是,我尝试添加标题,但标题没有显示。知道为什么以及如何使用 Matplotlib 添加标题吗?

import numpy as np
import shap
import matplotlib.pyplot as plt

myBaseline=1.5
shap_values_0 = np.array([-1, -4, 3])
test_point_0 = np.array([11, 12, 13])
features_names = ['a1','a2','a3']

shap.plots.force(myBaseline,shap_values_0,test_point_0,features_names,matplotlib = 1)
plt.suptitle("This is my title")    # It doesn't show up, why?
fig = plt.gcf()
fig.canvas.draw()
plt.close()

我必须在 shap.plots.force 添加 show=0,即

shap.plots.force(myBaseline,shap_values_0,test_point_0,features_names,matplotlib = 1, show=0)

我不知道它为什么有效,但它确实有效。

force_plotare中的最后几行:

if show:
    plt.show()
else:
    return plt.gcf()

因此,如果您设置 show = False,您可以将准备好的 SHAP 图作为 figure 对象并像往常一样根据您的需要进行自定义:

import shap

myBaseline = 1.5
shap_values_0 = np.array([-1, -4, 3])
test_point_0 = np.array([11, 12, 13])
features_names = ["a1", "a2", "a3"]

shap.plots.force(
    myBaseline, shap_values_0, test_point_0, features_names, matplotlib=True, show=False
)
plt.title("This is my title", y=1.75)
plt.show()