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

如何在shapviz的SHAP依赖图中让y=0水平线置于数据点后方

解决SHAP依赖图中y=0水平线置于数据点后方的问题

要让水平线显示在SHAP数据点的后方,核心是调整ggplot的图层顺序——先绘制水平线,再绘制数据点。因为ggplot默认后添加的图层会覆盖在之前的图层上方,而sv_dependence返回的图已经包含了数据点图层,所以需要手动调整图层顺序,或者重新组织图层的添加逻辑。

方案一:直接调整现有ggplot对象的图层顺序

这是最简便的方法,无需修改太多代码,只需将水平线图层插入到所有图层的最前面:

# Load required libraries
library(fastshap)
library(shapviz)
library(randomForest)
library(ggplot2) # 显式加载ggplot2,方便操作图层

# Load example data
data(iris)

# Run a ML model
model <- randomForest::randomForest(Sepal.Width ~ ., data = iris)

# Calculate SHAP values
shap_values <- fastshap::explain(model,
                               X = iris[,!names(iris) %in% c("Sepal.Width")],
                               pred_wrapper = predict,
                               nsim = 5)

# Dependence plot for "Petal.Length"
shp <- shapviz(shap_values, X = iris[,!names(iris) %in% c("Sepal.Width")])
plot <- sv_dependence(shp, v = "Petal.Length", color_var = "Petal.Length")

# 创建水平线图层
hline_layer <- geom_hline(yintercept = 0, color = "darkgrey")

# 将水平线图层插入到plot的图层列表最前端(先绘制水平线,再绘制数据点)
plot$layers <- c(hline_layer, plot$layers)

# 显示最终图形
print(plot)

方案二:手动构建ggplot图层(更灵活)

如果你需要更精细地控制绘图元素,可以手动组合图层,先绘制水平线,再添加SHAP数据点和其他样式:

# (前面的加载数据、训练模型、计算SHAP值代码与上述一致)

shp <- shapviz(shap_values, X = iris[,!names(iris) %in% c("Sepal.Width")])

# 手动构建图层:先水平线,再数据点,保持shapviz默认样式
plot <- ggplot(data = shp$S) +
  # 先绘制y=0水平线
  geom_hline(yintercept = 0, color = "darkgrey") +
  # 添加SHAP数据点,映射x、y和颜色变量
  geom_point(aes(x = Petal.Length, y = Petal.Length, color = Petal.Length), size = 2) +
  # 沿用shapviz默认的颜色比例尺和标签
  scale_color_viridis_c(option = "inferno") +
  labs(x = "Petal.Length", y = "SHAP value (Petal.Length)", color = "Petal.Length") +
  theme_minimal()

print(plot)

原理说明

ggplot的图层渲染顺序是从上到下(代码中先写的图层先绘制,后写的覆盖在上方)。sv_dependence生成的图默认先绘制数据点,所以直接用plot + geom_hline()会把线条放在点的上方;而通过调整图层顺序,让水平线先绘制,数据点后绘制,就能实现线条在点后方的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 09:23:22