如何在mgcViz生成的3D绘图中添加z=5位置的水平平面?
问题背景
在R环境中使用如下代码,基于mgcViz、rgl包绘制GAM模型的3D可视化结果:
library(mgcViz) library(rgl) n <- 500 x <- rnorm(n); y <- rnorm(n); z <- rnorm(n) ob <- (x-z)^2 + (y-z)^2 + rnorm(n) b <- gam(ob ~ s(x, y, z)) b <- getViz(b) plotRGL(sm(b, 1), fix = c("z" = 0), residuals = TRUE)
需要在生成的3D图中添加位于z=5坐标处的简单水平平面。
实现方案
plotRGL的渲染底层基于rgl包,绘制完基础图形后,直接调用rgl的图层函数叠加平面即可,不需要修改原有绘图逻辑。
- 首先区分两个容易混淆的z坐标:
- 代码中
fix = c("z" = 0)固定的是模型输入协变量z的取值为0,对应协变量空间的切片 - 需要添加的z=5水平平面,是3D绘图空间中垂直轴(对应模型预测响应值)高度为5的平面
- 代码中
- 叠加平面的代码,直接接在原有绘图代码后运行即可:
# 提取当前绘图的坐标轴范围,保证平面尺寸和现有图幅匹配 plot_bbox <- par3d("bbox") x_seq <- seq(plot_bbox[1], plot_bbox[2], length.out = 25) y_seq <- seq(plot_bbox[3], plot_bbox[4], length.out = 25) plane_mat <- matrix(5, nrow = length(x_seq), ncol = length(y_seq)) # 添加半透明水平平面 surface3d( x = x_seq, y = y_seq, z = plane_mat, color = "#2c7bb6", # 自定义平面颜色 alpha = 0.4, # 自定义透明度,取值范围0-1 lit = FALSE )
参数调整说明
- 若要调整平面透明度,修改
alpha参数即可,数值越小平面越透明 - 若要修改平面颜色,替换
color的色值即可 - 如果需求是将协变量z固定为5绘制模型切片平面,不需要额外加图层,直接将原有
plotRGL中的参数改为fix = c("z" = 5)即可。
内容的提问来源于stack exchange,提问作者Reza
相关产品推荐
相关产品推荐

