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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:02:16