如何使用grid.arrange美观排布多个dotplot避免绘图挤压
R语言grid.arrange排布lattice图形挤压问题解决方案
- 问题根源:grid.arrange默认会根据传入图形数量自动适配行列,4个图形默认按2行2列排布,单独设置heights参数未生效通常是因为没有配合widths参数,且没有调整lattice图形本身的内边距冗余。
- 方案1:同步调整布局参数+缩小图形内边距
library(lattice) library(gridExtra) # 调整lattice图形的内边距,减少不必要的留白占用显示空间 p1 = dotplot(mpg ~ cyl, data = mtcars, par.settings = list( layout.heights = list(top.padding = 0.5, bottom.padding = 0.5), layout.widths = list(left.padding = 0.5, right.padding = 0.5) )) # 显式指定行列数,同时设置宽高比例 grid.arrange(p1, p1, p1, p1, nrow = 2, ncol = 2, heights = c(1, 1), # 两行高度比例为1:1,可按需放大对应行数值 widths = c(1, 1)) # 两列宽度比例为1:1,可按需放大对应列数值
- 方案2:调整画布导出尺寸
如果是本地预览时出现挤压,导出图片时设置更大的画布宽高即可获得充足的单个图形显示空间:
# 导出为png格式示例,可按需调整width、height数值增大画布 png("4_dotplot.png", width = 900, height = 900, res = 120) grid.arrange(p1, p1, p1, p1, nrow = 2, ncol = 2) dev.off()
- 方案3:调整排布方向提升可读性
如果单图横向信息密度更高,可改为4行1列排布,让每个图横向占满画布:
grid.arrange(p1, p1, p1, p1, nrow = 4, ncol = 1, heights = rep(1,4))
如果单图纵向信息密度更高,可改为1行4列排布:
grid.arrange(p1, p1, p1, p1, nrow = 1, ncol = 4, widths = rep(1,4))
内容的提问来源于stack exchange,提问作者z_11122
相关产品推荐
相关产品推荐

