R语言中如何在2×2布局的子图内部嵌套创建子图
完全可以实现该嵌套子图效果
你现在基于par(mfrow = c(2,2))搭2行2列绘图矩阵的逻辑完全不用推翻重写,只需要配合base R原生的布局参数,就能在第4个绘图方格内部叠加嵌套子图,和你参考的排版效果完全一致。
实现核心逻辑
- 按原有流程正常绘制前3个图,先在第4格位置画好主面板图
- 借助
par()的fig参数自定义嵌套小图的位置范围,搭配new = TRUE参数,在不清除原有画布内容的前提下,在指定区域叠加尺寸更小的子图即可
关键注意点:
fig参数用的是整个画布的归一化全局坐标(范围为x轴01、y轴01),2x2布局下第4格(第二行第二列)的全局坐标边界是x: 0.5~1、y: 0~0.5,只要嵌套子图的坐标范围落在这个区间内,就不会溢出到其他三个图的区域。
可直接运行的示例代码
# 初始化画布与基础2x2布局 par(mfrow = c(2, 2)) # 按原有逻辑绘制前3张图 plot(rnorm(50), main = "第一行第一列图") plot(rnorm(50), main = "第一行第二列图") plot(rnorm(50), main = "第二行第一列图") # 绘制第4格的主图 plot(rnorm(50), main = "第二行第二列主图") # 配置嵌套子图的摆放位置:在第4格的右上角放置小图 par( fig = c(0.72, 0.97, 0.28, 0.48), # 全局坐标范围,完全落在第4格内部 new = TRUE # 保留原有画布,叠加新图而非覆盖 ) # 绘制嵌套小图,可按需调整边框、坐标轴、标题匹配目标效果 plot(rnorm(20), axes = FALSE, main = "嵌套子图") box()
实用调整技巧
- 可以根据想要的子图尺寸、摆放位置,反复调整
fig参数的四个边界值,灵活把小图放在第4格的左上、居中、右下任意位置 - 如果不想手动计算全局坐标,在激活第4格绘图区域时,可通过
par("usr")读取当前父图的坐标范围,再按比例换算出嵌套子图对应的全局位置,调整效率更高 - 如果你用ggplot2生态绘图,也可以借助
patchwork这类拼图包,直接把嵌套组合图作为单个元素拼入整体2x2布局的对应位置,实现同等效果,不需要手动计算坐标
内容的提问来源于stack exchange,提问作者Homap
相关产品推荐
相关产品推荐

