如何自定义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
相关产品推荐
相关产品推荐

