使用grid.arrange排列lattice生成的trellis图可读性差如何解决
R lattice + gridExtra 多图排布可读性差的解决方法
以下方案按优化优先级排列,优先尝试靠前的方案即可解决绝大多数场景的问题:
- 优先调整RMarkdown代码块的输出尺寸参数,这是最高效的优化方式。默认输出尺寸过小是多图挤压变形的最常见原因,在代码块头部添加
fig.width、fig.height参数放大整体绘图尺寸即可。
在RMarkdown代码块的开头指定输出尺寸:{r fig.width=12, fig.height=10},块内代码示例:
library(lattice) library(gridExtra) p1 = dotplot(mpg ~ cyl, data = mtcars) # 明确指定排布行列数,避免默认布局异常 grid.arrange(p1,p1,p1,p1, nrow = 2, ncol = 2)
- 调整单个lattice绘图的边距与字体大小,通过
par.settings参数修改绘图内边距、标签字号,避免元素重叠:
p1 = dotplot(mpg ~ cyl, data = mtcars, par.settings = list( # 缩减绘图不必要的内外边距 layout.widths = list(left.padding = 1, right.padding = 1), layout.heights = list(top.padding = 1, bottom.padding = 1), # 放大轴标签、刻度字号提升可读性 par.xlab.text = list(cex = 1.2), par.ylab.text = list(cex = 1.2), par.axis.text = list(cex = 1.1) ))
- 如果需要批量修改所有lattice绘图的配置,可以全局设置trellis参数,无需逐个修改绘图对象:
trellis.par.set( layout.widths = list(left.padding = 1, right.padding = 1), layout.heights = list(top.padding = 1, bottom.padding = 1), par.xlab.text = list(cex = 1.2), par.ylab.text = list(cex = 1.2), par.axis.text = list(cex = 1.1) )
- 调整grid.arrange的排布参数,为子图之间预留足够间距,同时自定义每行每列的尺寸比例:
# 需先加载grid包调用unit函数 library(grid) grid.arrange(p1,p1,p1,p1, nrow = 2, ncol = 2, widths = c(5,5), heights = c(4,4), # 子图之间保留1cm的间距 padding = unit(1, "cm"))
内容的提问来源于stack exchange,提问作者z_11122
相关产品推荐
相关产品推荐

