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

如何自定义shapviz绘图?新用户的定制需求与问题求助

shapviz 自定义图表解决方案

先准备基础示例环境(可直接运行):

library(shapviz)
library(ggplot2)
library(xgboost)

data("Boston", package = "MASS")
X <- data.matrix(Boston[, -14])
y <- Boston$medv
bst <- xgboost(data = X, label = y, nrounds = 10, verbose = 0)
sv <- shapviz(bst, X_pred = X)

1. 修改Beeswarm图调色板与Bar图颜色

  • Beeswarm散点的颜色映射通过scale_color_*系列函数调整,支持连续/离散调色板
  • Bar图的填充色用scale_fill_*修改,可设单一颜色或自定义配色组
# 生成基础重要性图
p <- sv_importance(sv, kind = "beeswarm", show_numbers = TRUE)

# 自定义配色
p + 
  scale_color_viridis_c(option = "magma") +  # Beeswarm用magma调色板
  scale_fill_manual(values = "#e74c3c")       # Bar图设为红色

2. 修改图例标题与尺寸

用labs()重命名图例标题,结合theme()调整图例键大小、标题文字样式:

p + 
  labs(color = "SHAP贡献值", fill = "平均绝对SHAP值") +  # 修改图例标题
  theme(
    legend.key.size = unit(2, "cm"),            # 图例键尺寸设为2cm
    legend.title = element_text(size = 14, face = "bold"),  # 标题加粗+放大
    legend.text = element_text(size = 12)       # 图例文字大小
  )

3. 自定义show_numbers = TRUE的数字标签

sv_importance生成的数字标签是geom_text图层,你可以直接修改该图层参数,或手动添加自定义标签:

方法1:修改现有图层

p <- sv_importance(sv, kind = "beeswarm", show_numbers = TRUE)

# 定位text图层(默认是第2个图层)
text_layer <- p$layers[[2]]

# 替换为带背景的label,调整样式
p$layers[[2]] <- geom_label(
  mapping = text_layer$mapping,
  data = text_layer$data,
  size = 5, 
  color = "white", 
  fill = "#2c3e50",
  inherit.aes = FALSE
)

print(p)

方法2:手动添加自定义标签(更灵活)

# 先关闭默认数字显示
p <- sv_importance(sv, kind = "beeswarm", show_numbers = FALSE)

# 手动添加格式化后的标签
p + 
  geom_text(
    data = p$data,
    aes(x = value, y = variable, label = sprintf("%.2f", value)),  # 保留两位小数
    size = 4,
    color = "darkblue",
    hjust = -0.1  # 标签右移,避免遮挡bar图
  )

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:35:23