R语言rgl包多子图3D绘图:全局标题添加与子场景间距设置
在rgl包中添加全局标题与调整子图间距的解决方案
刚好我之前也折腾过rgl的多子图布局问题,针对你提到的2D绘图里title(outer=TRUE)和mar参数对应的rgl实现,整理了两种实用方案,直接上代码和解释:
1. 添加全局标题
rgl没有直接对应outer=TRUE的参数,但可以通过两种方式实现全局标题效果:
方法一:用layout3d划分独立标题区域
先创建包含标题栏和子图区域的布局,在标题区域添加文本即可:
library(rgl) # 创建布局:顶部1行放标题,下方两行放两个子图 layout3d(matrix(c(1,2,3), nrow=3, ncol=1), heights=c(0.1, 0.45, 0.45)) # 标题区域(第一个子场景) text3d(0, 0, 0, "我的全局标题", cex=2, font=2) par3d(userMatrix = diag(4)) # 固定标题视角,避免随3D旋转 # 第一个3D子图 next3d() plot3d(rnorm(100), rnorm(100), rnorm(100), main="子图1") # 第二个3D子图 next3d() plot3d(rnorm(100), rnorm(100), rnorm(100), main="子图2")
方法二:用mtext3d直接在全局场景加标题
如果已经用mfrow3d创建了子图布局,可以直接调用mtext3d添加全局标题:
library(rgl) # 创建2行1列的子图布局 mfrow3d(2,1) # 绘制第一个子图 plot3d(rnorm(100), rnorm(100), rnorm(100), main="子图1") # 绘制第二个子图 next3d() plot3d(rnorm(100), rnorm(100), rnorm(100), main="子图2") # 添加全局标题:line参数控制标题距离顶部的位置 mtext3d("我的全局标题", line=3, cex=2, font=2)
2. 调整子图之间的间距
对应2D绘图的mar参数,rgl里可以通过以下两种方式控制子图间距:
方法一:mfrow3d的margin参数
mfrow3d的margin参数可以设置每个子图周围的边距(数值是相对于窗口大小的比例),间接调整子图之间的间距:
# 设置子图上下左右边距为0.1,子图间的间距会自动适配 mfrow3d(2,1, margin=c(0.1, 0.1, 0.1, 0.1))
方法二:layout3d的heights/widths参数
如果用layout3d自定义布局,可以通过调整heights(垂直布局)或widths(水平布局)来预留空白区域,直接控制子图间距:
# 布局结构:标题行 + 空白行 + 子图1 + 空白行 + 子图2 layout3d(matrix(c(1,4,2,5,3), nrow=5, ncol=1), heights=c(0.1, 0.05, 0.35, 0.05, 0.35)) # 标题区域 text3d(0,0,0,"全局标题",cex=2) par3d(userMatrix = diag(4)) # 子图1 next3d() plot3d(rnorm(100), rnorm(100), rnorm(100)) # 子图2 next3d() plot3d(rnorm(100), rnorm(100), rnorm(100))
这里heights里的0.05就是子图之间的空白间距比例,你可以根据需求调整数值。
内容的提问来源于stack exchange,提问作者haidan li
相关产品推荐
相关产品推荐

