在R语言中绘制3D空间内拆分为8个彩色小立方体的大立方体
R语言3D拆分立方体可视化实现
你的原始数据存在几处笔误,我先修正后基于rgl包实现3D交互可视化,8个小立方体使用高区分度颜色分别填充,外层大立方体使用黑色边框展示避免遮挡内部结构。
步骤1:修正后的数据集
原始type_cube向量中存在2处typ3_4拼写错误、1处多余的换行引号,修正后完整数据如下:
type_cube <- c("type_8","type_8","type_8","type_8", "type_8","type_8","type_8","type_8", "type_7","type_7","type_7","type_7", "type_7","type_7","type_7","type_7", "type_6","type_6","type_6","type_6", "type_6","type_6","type_6","type_6", "type_5","type_5","type_5","type_5", "type_5","type_5","type_5","type_5", "type_4", "type_4","type_4","type_4", "type_4","type_4","type_4","type_4", "type_3","type_3","type_3","type_3", "type_3","type_3","type_3","type_3", "type_2","type_2","type_2","type_2", "type_2","type_2","type_2","type_2", "type_1","type_1","type_1","type_1", "type_1","type_1","type_1","type_1", "big_cube", "big_cube", "big_cube", "big_cube", "big_cube", "big_cube", "big_cube", "big_cube") x <- c(0.0,0.0,0.5,0.5,0.5,0.0,0.0,0.5,0.5,1.0,1.0,0.5,0.5,0.5, 1.0,1.0,0.0,0.5,0.5,0.0,0.0,0.0,0.5,0.5,0.0,0.5,0.5,0.0,0.0,0.5, 0.0,0.5,1.0,0.5,0.5,1.0,0.5,0.5,1.0,1.0,1.0,0.5,0.5,1.0, 0.5,0.5,1.0,1.0,0.0,0.5,0.5,0.0,0.0,0.5,0.5,0.0,1.0,1.0, 0.5,0.5,0.5,0.5,1.0,1.0,0.0,0.0,1.0,1.0,1.0,0.0,0.0,1.0) y <- c(0.0,0.5,0.5,0.0,0.0,0.0,0.5,0.5,0.0,0.0,0.5,0.5,0.0,0.5,0.5, 0.0,0.5,0.5,1.0,1.0,0.5,1.0,1.0,0.5,0.0,0.0,0.5,0.5,0.0,0.0, 0.5,0.5,0.5,0.5,1.0,1.0,0.5,1.0,1.0,0.5,0.0,0.0,0.5,0.5,0.0, 0.5,0.5,0.0,0.5,0.5,1.0,1.0,0.5,0.5,1.0,1.0,1.0,0.5,0.5,1.0, 0.5,1.0,1.0,0.5,0.0,1.0,1.0,0.0,0.0,0.0,1.0,1.0) z <- c(0.0,0.0,0.0,0.0,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.5,0.0,0.0,0.0, 0.0,0.5,0.5,0.5,0.5,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,0.5,0.5, 0.5,0.5,0.5,0.5,0.5,0.5,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0,0.5, 0.5,0.5,0.5,1.0,1.0,1.0,1.0,0.5,0.5,0.5,0.5,1.0,1.0,1.0,1.0, 0.5,0.5,0.5,0.5,0.0,0.0,0.0,0.0,1.0,1.0,1.0,1.0) data <- data.frame(type_cube,x,y,z)
步骤2:安装加载依赖包
使用R专门的3D可视化包rgl实现交互展示:
# 首次使用先安装包 # install.packages("rgl") library(rgl)
步骤3:定义颜色映射并绘制
# 8个小立方体高区分度配色 cube_colors <- c( "type_1" = "#FF3333", "type_2" = "#FF9933", "type_3" = "#FFFF33", "type_4" = "#33FF33", "type_5" = "#33FFFF", "type_6" = "#3333FF", "type_7" = "#9933FF", "type_8" = "#FF33FF" ) # 清空3D画布 open3d() # 遍历绘制所有小立方体 for (cube_type in names(cube_colors)) { vert <- data[data$type_cube == cube_type, c("x","y","z")] mesh <- cube3d() mesh$vb <- rbind(t(vert), 1) # alpha参数控制透明度,方便观察相邻立方体结构 shade3d(mesh, col = cube_colors[cube_type], alpha = 0.8) } # 绘制外层大立方体边框 big_vert <- data[data$type_cube == "big_cube", c("x","y","z")] big_mesh <- cube3d() big_mesh$vb <- rbind(t(big_vert), 1) wire3d(big_mesh, col = "black", lwd = 2) # 调整初始视角 view3d(theta = 30, phi = 30, zoom = 0.8)
运行完成后会弹出独立的3D交互窗口,可通过鼠标拖拽旋转视角、滚轮缩放观察结构。
内容的提问来源于stack exchange,提问作者mraveek
相关产品推荐
相关产品推荐

