如何缩减绘图输出空间?R语言分屏绘图尺寸调整问询
嘿,我之前在毕业论文排版绘图时也碰到过类似的需求,给你几个比直接调整split.screen坐标更高效、灵活的整体空间缩减方法:
方法1:用
layout()替代split.screen() layout()比split.screen()更直观,能直接通过边距参数压缩整体冗余空间,同时保持分屏布局:
# 定义1行2列的分屏布局 layout(matrix(c(1,2), nrow=1), widths=c(1,1)) # 全局调整边距:mar是子图内部边距,oma是整体外边距,数值越小空间越紧凑 par(mar=c(2.5, 2.5, 1.5, 0.5), oma=c(1,1,1,1)) # 绘制左图 plot(1:10, main="Screen1", xlab="", ylab="") # 绘制右图 plot(10:1, main="Screen2", xlab="", ylab="")
通过微调mar和oma的数值,可以精准控制整体绘图的紧凑程度,比单独调整分屏坐标更高效。
方法2:用
gridExtra包实现精细化控制(适配基础绘图/ggplot2) 如果你的绘图是用ggplot2,或者想更精准定义整体输出尺寸,gridExtra的grid.arrange()是绝佳选择:
library(gridExtra) library(ggplot2) # 示例绘图对象 p1 <- ggplot(data.frame(x=1:10, y=1:10), aes(x,y)) + geom_point() + theme_bw() + theme(plot.margin = margin(3,3,3,3, "pt")) # 压缩子图内部边距 p2 <- ggplot(data.frame(x=10:1, y=1:10), aes(x,y)) + geom_point() + theme_bw() + theme(plot.margin = margin(3,3,3,3, "pt")) # 组合绘图并设置整体尺寸 grid.arrange(p1, p2, ncol=2, widths=c(3.5, 3.5), heights=3, # 整体宽高(英寸) padding=unit(0.1, "cm")) # 子图间距
这种方式可以直接定义整体输出的物理尺寸,配合子图边距调整,完全满足毕业论文中紧凑排版的需求。
方法3:从绘图设备根源控制尺寸
如果需要导出图片嵌入Markdown,直接在导出设备中设置整体宽高,配合布局调整,一步到位缩小整体空间:
# 导出为PNG,直接定义整体尺寸和分辨率 png("two_plots_compact.png", width=5, height=3, dpi=300) layout(matrix(c(1,2), nrow=1)) par(mar=c(2,2,1,1)) # 极致压缩子图边距 plot(1:10, main="", xlab="", ylab="") plot(10:1, main="", xlab="", ylab="") dev.off()
导出的图片本身尺寸紧凑,放到Markdown里无需额外调整。
优化你原有的
split.screen方案 如果一定要继续用split.screen,可以结合par(plt)先缩小整体绘图区域,再分屏:
# plt参数定义整体绘图区域占设备的比例:c(左,右,下,上) par(plt=c(0.08, 0.92, 0.08, 0.85)) figs <- rbind(c(0, 0.5, 0, 1), c(0.5, 1, 0, 1)) colnames(figs) <- c("W", "E", "S", "N") screenIDs <- split.screen(figs) screen(screenIDs[1]) plot(1:10) screen(screenIDs[2]) plot(10:1) close.screen(all=T)
这样先压缩整体画布,再分屏,比单独调整分屏的N坐标更能控制整体空间。
内容的提问来源于stack exchange,提问作者toyo10
相关产品推荐
相关产品推荐

