You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SHAP力图中保留4位小数且不旋转文本?

解决SHAP力图变量小数位数过多且不旋转文本的问题

方法1:预处理数据,手动保留指定小数位数

直接对特征值和SHAP值做小数位数截断,再传入绘图函数:

import shap
import matplotlib.pyplot as plt

# 假设已获取shap_values、特征数据集X及特征名feature_names
sample_idx = 0
# 保留3位小数处理特征值与SHAP值
rounded_features = [round(val, 3) for val in X.iloc[sample_idx].values]
rounded_shap_vals = [round(val, 3) for val in shap_values[sample_idx]]

# 生成处理后的force plot
shap.plots.force(
    base_value=shap_values.base_values[sample_idx],
    shap_values=rounded_shap_vals,
    features=rounded_features,
    feature_names=feature_names,
    matplotlib=True,
    figsize=(40, 3)
)
plt.show()

方法2:绘图后修改文本标签

如果不想改动原始数据,可在生成图表后遍历文本元素,替换为指定小数位数的内容:

import shap
import matplotlib.pyplot as plt
import re

# 生成原始force plot
fig = shap.plots.force(
    shap_values[0],
    matplotlib=True,
    figsize=(40, 3)
)

# 遍历所有文本,替换数值为3位小数
for text in fig.axes[0].texts:
    raw_text = text.get_text()
    # 正则匹配数值并格式化
    formatted_text = re.sub(r'(-?\d+\.\d+)', lambda m: f"{float(m.group(1)):.3f}", raw_text)
    text.set_text(formatted_text)

plt.show()

额外优化(避免文本拥挤)

如果不旋转文本仍有显示问题,可尝试:

  • 进一步增大figsize的宽度(比如(50, 3)),给文本留出更多空间
  • 减小文本字体大小:在绘图后添加plt.gca().tick_params(labelsize=8),或遍历文本设置text.set_fontsize(8)

内容的提问来源于stack exchange,提问作者hridhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 21:46:00