如何在R中将带约束的2D绘图推广为3D绘图(含约束立方体)
R实现带约束立方体的3D散点图
步骤1:生成模拟数据与约束判断
先生成包含x、y、z维度的随机数据,同时根据约束条件给点标记颜色:
- 符合约束:
-7 < x < 7、-5 < y < 5、-4 < z < 4,标记为深蓝色 - 超出约束:标记为红色
# 加载所需包 library(rgl) # 设置随机种子保证结果可复现 set.seed(123) # 生成200条模拟数据 n <- 200 data <- data.frame( x = runif(n, -10, 10), y = runif(n, -8, 8), z = runif(n, -6, 6) ) # 判断点是否在约束立方体内 data$in_bounds <- with(data, x > -7 & x < 7 & y > -5 & y < 5 & z > -4 & z < 4) # 分配颜色:深蓝色(符合约束)/红色(超出约束) data$color <- ifelse(data$in_bounds, "#003366", "#ff3333")
步骤2:绘制3D散点图
用rgl::plot3d绘制3D散点图,通过颜色参数区分约束内外的点:
# 初始化3D绘图窗口 open3d() # 绘制3D散点图 plot3d( data$x, data$y, data$z, col = data$color, size = 5, xlab = "X", ylab = "Y", zlab = "Z", main = "3D散点图与约束立方体" )
步骤3:绘制约束立方体
构造立方体的8个顶点坐标,再通过顶点连接顺序绘制12条边框:
# 定义约束立方体的边界值 x_min <- -7; x_max <- 7 y_min <- -5; y_max <- 5 z_min <- -4; z_max <- 4 # 构造立方体的8个顶点 cube_vertices <- rbind( c(x_min, y_min, z_min), c(x_max, y_min, z_min), c(x_max, y_max, z_min), c(x_min, y_max, z_min), c(x_min, y_min, z_max), c(x_max, y_min, z_max), c(x_max, y_max, z_max), c(x_min, y_max, z_max) ) # 定义立方体12条边的顶点连接索引 cube_edges <- matrix( c(1,2, 2,3, 3,4, 4,1, 5,6, 6,7, 7,8, 8,5, 1,5, 2,6, 3,7, 4,8), ncol = 2, byrow = TRUE ) # 绘制立方体边框(灰色虚线,加粗显示) lines3d( cube_vertices[cube_edges, ], col = "#666666", lwd = 2, lty = 2 )
补充说明
- 若需要填充立方体的面,可使用
quads3d函数分别绘制6个面的顶点 rgl包支持交互操作:拖拽可旋转视角、滚轮可缩放,方便查看3D细节- 偏好静态3D图的话,也可以用
scatterplot3d包,但交互性不如rgl
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

