画像が真っ白になる理由
SHAPのsummary_plotで描画したグラフを保存したいとき、下のように書くと真っ白な画像が保存されてしまう。
shap.summary_plot(
shap_values=shap_values,
features=X,
feature_names=X.columns,
)
plt.savefig("image.png") # 画像を保存
この理由は以下の通り。
- 実はsummary_plotの内部で
plt.show()
が実行されている。 -
plt.show()
でグラフを描画すると、そのグラフのデータは消されてしまうため、その後にplt.savefig()
を実行しても保存する画像のデータがなくなってしまっている。 - だから、仕方なく真っ白な画像が保存されてしまうという訳である。
したがって、summary_plotの内部ではplt.show()
は実行しないで、plt.savefig()
した後にplt.show()
を実行すればよい。
解決法
summary_plotのshowというパラメータをFalse
にすれば、内部のplt.show()
が実行されないので、下のように書けば解決できる。デフォルトではshowはTrue
になっている。
shap.summary_plot(
shap_values=shap_values,
features=X,
feature_names=X.columns,
show=False, # ←これを追加
)
plt.savefig("image.png") # 画像を保存
plt.show() # グラフを描画
dependence_plot
やforce_plot
、waterfall_plot
にもshowというパラメータがあるので、これらに関しても同様にして解決できる。
参考までにsummary_plotの公式リファレンスを貼っておくので、パラメータについて詳しく知りたい方はどうぞ。