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

如何在张量平滑图中为X轴和Z轴添加密度图或地毯图

解决方案:在vis.gam 3D透视图中添加密度/地毯图

要在vis.gam生成的3D透视图上添加数据密度可视化,核心是利用vis.gam返回的坐标转换函数,将2D轴的密度/地毯图坐标映射到3D绘图空间中。以下是具体实现步骤:


步骤1:绘制基础3D图并保存坐标转换函数

首先运行你的vis.gam代码,同时保存返回的坐标转换工具trans,后续用于将3D坐标转换为绘图设备的2D坐标:

# 拟合GAM模型
gam.model <- gam(death_or_neurodeficit1y ~ 
                   te(OtherBiomarker, laktat_0, bs = 'cr') + age + isMALE + diabetes + trop_t_s + shock + byst_cpr + gfr_0,
                 data = df,
                 family = "binomial")

# 绘制3D图并保存坐标转换函数
par(cex = 1)
trans <- vis.gam(gam.model,
                 view = c("OtherBiomarker", "laktat_0"),
                 plot.type = "persp",
                 type = "response",
                 theta = 320,
                 phi = 25,
                 color = "heat",
                 xlab = "\n\nOtherBiomarker at admission",
                 ylab = "\n\nLactate at admission",
                 zlab = "\n\nPredicted Probability",
                 border = "black",
                 r = 100,
                 ticktype = "detailed"
)

方法一:添加地毯图(Rug Plot)

在X轴(OtherBiomarker)和Y轴(laktat_0)对应的底部平面绘制数据点的短线条,直观展示数据分布:

# 提取目标变量数据
x_data <- gam.model$model$OtherBiomarker
y_data <- gam.model$model$laktat_0

# 获取轴范围
x_range <- range(x_data)
y_range <- range(y_data)
z_min <- 0  # 预测概率的最小值,对应Z轴底部

# 添加X轴(OtherBiomarker)地毯图:Y取最小值,Z取最小值平面
rug_x <- trans(x = x_data, y = rep(y_range[1], length(x_data)), z = rep(z_min, length(x_data)))
segments(rug_x$x, rug_x$y, rug_x$x, rug_x$y + 0.02*diff(par("usr")[3:4]), col = "darkblue", lwd = 2)

# 添加Y轴(laktat_0)地毯图:X取最小值,Z取最小值平面
rug_y <- trans(x = rep(x_range[1], length(y_data)), y = y_data, z = rep(z_min, length(y_data)))
segments(rug_y$x, rug_y$y, rug_y$x + 0.02*diff(par("usr")[1:2]), rug_y$y, col = "darkred", lwd = 2)

方法二:添加密度函数图

将计算好的密度曲线映射到3D图的对应轴平面,展示数据分布的密度趋势:

# 计算密度
lactate_density <- density(y_data)
OtherBiomarker_density <- density(x_data)

# 标准化密度值到0~0.1(适配Z轴概率范围,可根据实际调整)
norm_density_x <- lactate_density$y / max(lactate_density$y) * 0.1
norm_density_y <- OtherBiomarker_density$y / max(OtherBiomarker_density$y) * 0.1

# 添加X轴(OtherBiomarker)密度图:Y取最小值平面
density_x_coords <- trans(x = lactate_density$x, y = rep(y_range[1], length(lactate_density$x)), z = norm_density_x)
lines(density_x_coords$x, density_x_coords$y, col = "darkblue", lwd = 2)

# 添加Y轴(laktat_0)密度图:X取最小值平面
density_y_coords <- trans(x = rep(x_range[1], length(OtherBiomarker_density$x)), y = OtherBiomarker_density$x, z = norm_density_y)
lines(density_y_coords$x, density_y_coords$y, col = "darkred", lwd = 2)

注意事项

  1. 若预测概率范围不是0~1(二项式模型一般是),需调整z_min和密度标准化的范围;
  2. 可修改col、lwd、线段长度等参数优化可视化效果;
  3. 若需添加Z轴(预测概率)的密度,可提取模型预测值后重复上述流程,选择合适的平面绘制。

内容的提问来源于stack exchange,提问作者Fabian.m

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 19:56:01