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

R语言使用rgl包绘制指定对角点三维范围盒的问题解决

R中使用rgl绘制指定对角顶点的三维生态位盒

问题原因

rgl包自带的printBox3d()(即你调用的printBox())参数逻辑并非接收两个对角顶点坐标:该函数前三个入参为三维盒的中心点坐标,后三个入参为三维盒在x、y、z轴上的总边长,因此会出现以第一个点为中心向正负双向延伸的效果,不符合预期。

可行实现代码

你可以通过转换rgl内置的立方体图元,直接生成以(x1,y1,z1)为最小角、(x2,y2,z2)为最大角的轴对齐三维盒,代码如下:

# 坐标轴整体范围
x <- c(31.94, 9460.00)
y <- c(28, 14375)
z <- c(0.02, 95.11)

# 三维盒的两个对角顶点坐标
x1 <- 42.69
y1 <- 4
z1 <- 0.03
x2 <- 3686.996
y2 <- 1997.317
z2 <- 5.156709

# 加载包、初始化绘图窗口
library(rgl)
open3d()
# 绘制坐标轴,type="n"表示仅生成坐标系不绘制原始散点
plot3d(x, y, z,
       xlab = "EC 1:5 [mS/cm]",
       ylab = "Na [mg/kg]", # 修正原代码括号不匹配的笔误
       zlab = "SAR",
       type = "n")

# 生成立方体图元:默认是中心在原点、各轴范围为[-1,1]的单位立方体
niche_box <- cube3d()
# 缩放立方体到目标区间的尺寸
niche_box <- scale3d(niche_box,
                     x = (x2 - x1)/2,
                     y = (y2 - y1)/2,
                     z = (z2 - z1)/2)
# 平移立方体到目标坐标位置
box_center <- c((x1 + x2)/2, (y1 + y2)/2, (z1 + z2)/2)
niche_box <- translate3d(niche_box,
                         x = box_center[1],
                         y = box_center[2],
                         z = box_center[3])

# 绘制半透明填充的盒体
shade3d(niche_box, col = "#2c7fb8", alpha = 0.3, add = TRUE)
# 绘制盒体黑色边框
wire3d(niche_box, col = "black", lwd = 2, add = TRUE)

可选:调用printBox3d实现的写法

如果要继续使用printBox3d函数,只需按其参数规则传入中心点和各轴边长即可:

printBox3d(x = box_center[1],
           y = box_center[2],
           z = box_center[3],
           dx = x2 - x1,
           dy = y2 - y1,
           dz = z2 - z1,
           fill = "#2c7fb8",
           col = "black",
           alpha = 0.3)

参数调整说明

  • 可修改shade3d中的col参数调整盒体填充色,alpha参数调整填充透明度(取值0-1,越小越透明)
  • 可修改wire3d中的lwd参数调整边框线粗细
  • 如果需要保留plot3d初始绘制的坐标轴范围端点散点,去掉type = "n"参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:15:40