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

如何合并vis.gam生成的图形并成功保存?

解决vis.gam生成的3D图形合并与保存问题

问题根源

vis.gam生成的是基础R绘图(base plot),并非ggplot2对象,因此grid.arrange、ggarrange这类针对ggplot的工具无法直接适配。以下是两种支持自定义布局的可行方案:


方案1:使用gridBase包嵌入grid布局

该方法可灵活控制图形的位置和尺寸,适合精细化布局需求:

# 安装并加载依赖包
install.packages("gridBase")
library(gridBase)
library(grid)

# 开启图形设备并设置参数
png("fig.png", width = 465, height = 225, res = 300)
# 创建1行2列的grid布局容器
pushViewport(viewport(layout = grid.layout(1, 2)))

# 绘制第一个图形到左侧位置
pushViewport(viewport(layout.pos.row = 1, layout.pos.col = 1))
par(new = TRUE, fig = gridFIG())  # 适配base plot到grid视图
vis.gam(mod1, view = c("x1",  "x2"), theta = 120, plot.type = "persp")
popViewport()

# 绘制第二个图形到右侧位置
pushViewport(viewport(layout.pos.row = 1, layout.pos.col = 2))
par(new = TRUE, fig = gridFIG())
vis.gam(mod1, view = c("x3",  "x4"), theta = 120, plot.type = "persp")
popViewport()

# 关闭图形设备完成保存
dev.off()

方案2:使用cowplot包的plot_grid配合recordPlot

该方法通过记录基础绘图对象,将其转换为可被plot_grid处理的格式,操作更简洁:

# 安装并加载依赖包
install.packages("cowplot")
library(cowplot)

# 分别绘制并记录两个图形
vis.gam(mod1, view = c("x1",  "x2"), theta = 120, plot.type = "persp")
p1_recorded <- recordPlot()
dev.off()

vis.gam(mod1, view = c("x3",  "x4"), theta = 120, plot.type = "persp")
p2_recorded <- recordPlot()
dev.off()

# 合并图形并保存
png("fig.png", width = 465, height = 225, res = 300)
plot_grid(p1_recorded, p2_recorded, ncol = 2)  # ncol控制列数
dev.off()

原保存代码失效原因

你之前的代码仅打开了图形设备,但未在设备中执行绘图操作,因此生成空文件。正确流程是:打开设备 → 执行绘图 → 关闭设备,上述两种方案均遵循此逻辑。

内容的提问来源于stack exchange,提问作者Ahsk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:17:31