如何修改shap.plot.bar与shap.plots.waterfalls的图表颜色?
修改SHAP Bar图与Waterfall图颜色的解决方案
一、SHAP Bar图颜色修改
SHAP的bar绘图函数支持直接传入color参数设置颜色,无需依赖matplotlib全局修改:
import shap import matplotlib.pyplot as plt # 单颜色设置 shap.plots.bar(shap_values, color="#2E86AB", show=False) plt.title("This is my title") plt.show()
如果需要为每个特征设置不同颜色,传入对应长度的颜色列表即可:
# 自定义多色列表,数量需匹配特征总数 custom_colors = ["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4", "#FFEAA7"] shap.plots.bar(shap_values, color=custom_colors, show=False) plt.title("This is my title") plt.show()
二、SHAP Waterfall图颜色修改
Waterfall图没有直接暴露颜色参数,需通过获取matplotlib轴对象修改条形patch的颜色:
import shap import matplotlib.pyplot as plt # 绘制图并获取轴对象 fig, ax = plt.subplots() shap.plots.waterfall(shap_values[-1], show=False) # 遍历所有条形,按正负贡献设置颜色 bars = ax.patches for bar in bars: if bar.get_height() > 0: bar.set_facecolor("#27AE60") # 正贡献设为绿色 else: bar.set_facecolor("#E74C3C") # 负贡献设为红色 plt.title("Waterfall Custom Color") plt.show()
也可以单独修改指定位置的条形颜色:
# 将第一个条形改为橙色 bars[0].set_facecolor("#F39C12")
注意事项
- 调用
shap.plots.xxx时必须添加show=False,避免提前渲染导致无法修改元素。 - 颜色支持十六进制代码、matplotlib预设颜色名(如"red")或RGB元组(如(0.2, 0.4, 0.6))。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

