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

R使用Plot3D包绘制透明长方体3D网格并叠加到scatter3D散点图咨询

实现方案

plot3D 包没有内置的透明长方体网格绘制函数,但可以通过polygon3D()手动封装实现,完全支持叠加到scatter3D()生成的散点图上,具体实现步骤和可运行代码如下:

核心思路

  1. 先绘制基础3D散点图作为底图
  2. 封装单个透明长方体的绘制函数,支持自定义大小、颜色、透明度
  3. 遍历所有网格单元,调用自定义函数叠加到散点底图上

可运行示例代码

library(plot3D)

# 自定义绘制单个透明长方体的函数
draw_cube <- function(xmin, xmax, ymin, ymax, zmin, zmax, col = "gray", alpha = 0.2, add = TRUE) {
  # 前面(z=zmax)
  polygon3D(
    x = c(xmin, xmax, xmax, xmin),
    y = c(ymin, ymin, ymax, ymax),
    z = rep(zmax, 4),
    col = col, alpha = alpha, border = "black", lwd = 0.5, add = add
  )
  # 后面(z=zmin)
  polygon3D(
    x = c(xmin, xmax, xmax, xmin),
    y = c(ymin, ymin, ymax, ymax),
    z = rep(zmin, 4),
    col = col, alpha = alpha, border = "black", lwd = 0.5, add = TRUE
  )
  # 左面(x=xmin)
  polygon3D(
    x = rep(xmin, 4),
    y = c(ymin, ymax, ymax, ymin),
    z = c(zmin, zmin, zmax, zmax),
    col = col, alpha = alpha, border = "black", lwd = 0.5, add = TRUE
  )
  # 右面(x=xmax)
  polygon3D(
    x = rep(xmax, 4),
    y = c(ymin, ymax, ymax, ymin),
    z = c(zmin, zmin, zmax, zmax),
    col = col, alpha = alpha, border = "black", lwd = 0.5, add = TRUE
  )
  # 底面(y=ymin)
  polygon3D(
    x = c(xmin, xmax, xmax, xmin),
    y = rep(ymin, 4),
    z = c(zmin, zmin, zmax, zmax),
    col = col, alpha = alpha, border = "black", lwd = 0.5, add = TRUE
  )
  # 顶面(y=ymax)
  polygon3D(
    x = c(xmin, xmax, xmax, xmin),
    y = rep(ymax, 4),
    z = c(zmin, zmin, zmax, zmax),
    col = col, alpha = alpha, border = "black", lwd = 0.5, add = TRUE
  )
}

# 1. 生成示例散点数据
set.seed(123)
x <- runif(50, 0, 3)
y <- runif(50, 0, 3)
z <- runif(50, 0, 3)

# 2. 绘制基础3D散点图
scatter3D(x, y, z, col = "red", pch = 16, cex = 1.2,
          xlab = "X轴", ylab = "Y轴", zlab = "Z轴",
          xlim = c(0,3), ylim = c(0,3), zlim = c(0,3),
          ticktype = "detailed")

# 3. 叠加3x3x3的透明网格
for (i in 0:2) {
  for (j in 0:2) {
    for (k in 0:2) {
      draw_cube(
        xmin = i, xmax = i+1,
        ymin = j, ymax = j+1,
        zmin = k, zmax = k+1,
        col = "lightblue", alpha = 0.2
      )
    }
  }
}

优化建议

  • 网格数量较大时,可以将填充色col设为NA,只保留边框,渲染速度提升明显
  • 透明度alpha建议设置在0.1-0.3区间,兼顾网格辨识度和散点可读性
  • 不同网格单元可自定义填充色,比如根据单元内散点数量匹配对应的颜色值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:06:02