如何合并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
相关产品推荐
相关产品推荐

