R语言rgl窗口创建非规则布局子场景的问题咨询
在rgl单个窗口中创建非对齐子场景的解决方案
原代码问题分析
你用par3d(windowRect)的方式是错误的——这个参数是用来设置整个rgl窗口在屏幕上的位置和尺寸,并非子场景在窗口内的显示区域。而且每次调用plot3d会默认创建新的子场景并设为当前,导致之前的红色球体子场景被隐藏,最终只显示最后创建的蓝色球体。
修正:左右分栏的两个子场景
要创建独立的非对齐子场景,应该用subscene3d()创建子场景并指定内部视口,再切换到对应子场景绘图:
library(rgl) # 打开主3D窗口,获取主场景ID main_scene <- open3d() # 创建左侧红色子场景,视口占窗口左半部分(x:0-0.5,y:0-1) sub_red <- subscene3d(main_scene, viewport = c(0, 0, 0.5, 1)) currentSubscene3d(sub_red) # 切换到该子场景 plot3d(rnorm(100), rnorm(100), rnorm(100), col = "red", type = "s") # 创建右侧蓝色子场景,视口占窗口右半部分(x:0.5-1,y:0-1) sub_blue <- subscene3d(main_scene, viewport = c(0.5, 0, 1, 1)) currentSubscene3d(sub_blue) # 切换到该子场景 plot3d(rnorm(100), rnorm(100), rnorm(100), col = "blue", type = "s")
进阶:蓝色子场景放在红色子场景右上角(尺寸为1/4)
如果要让蓝色子场景位于红色子场景的右上角,且面积为红色的1/4,只需要调整两个子场景的视口参数即可:
library(rgl) main_scene <- open3d() # 创建红色大子场景,占满整个窗口 sub_red <- subscene3d(main_scene, viewport = c(0, 0, 1, 1)) currentSubscene3d(sub_red) plot3d(rnorm(100), rnorm(100), rnorm(100), col = "red", type = "s") # 创建蓝色小子场景,位于窗口右上角(x:0.5-1,y:0.5-1),面积为红色的1/4 sub_blue <- subscene3d(main_scene, viewport = c(0.5, 0.5, 1, 1)) currentSubscene3d(sub_blue) plot3d(rnorm(100), rnorm(100), rnorm(100), col = "blue", type = "s")
关键说明
subscene3d():基于主场景创建新子场景,viewport参数接受0-1的比例值,对应子场景在窗口中的x起始、y起始、x结束、y结束位置。currentSubscene3d():切换到指定子场景绘图,确保不同子场景的内容不会互相覆盖。- 无需依赖
mfrow3d(),可以完全自定义子场景的位置和尺寸,满足非行列对齐的需求。
内容的提问来源于stack exchange,提问作者Patrick
相关产品推荐
相关产品推荐

