使用网格或晶格图形调整多行expression()语句的行高

时间:2014-12-27 10:12:41

标签: r expression lattice r-grid plotmath

我有一个包含多行expression()语句的点阵图。我想微调这个语句的行之间的垂直空间。有没有办法做到这一点?

以下是演示此问题的代码:

library(devtools)
library(grid)
library(lattice)
source_gist(2732693)  # source grid.expr()


# PANEL FUNCTIONS
myPanel1 <- function () {
  grid.text(
    label = expression(atop("This is", paste("italicized ", italic(F))),
    gp = gpar(lineheight = 5)))
}
myPanel2 <- function () {
  grid.expr(
    as.expression(
      list("This is", bquote(paste("italicized ", italic(F))))),
    gp = gpar(lineheight = 5))
}    


# DRAW THE FIGURES
xyplot(1 ~ 1, panel = myPanel1)
xyplot(1 ~ 1, panel = myPanel2)

此代码提供了两种在格子图中创建多行expression()语句的方法。但是在这两种情况下都忽略了gp参数,我没有看到调整表达式中行的垂直间距的方法。有没有办法做到这一点,没有“手动”定位行,每行有一个单独的grid.textgrid.expr命令?

1 个答案:

答案 0 :(得分:1)

你可以试试gtable

library(gtable)
library(grid)

grid.expr <- function(labels, ..., 
                      width=NULL, heights=NULL, 
                      margin=unit(0.5,"line")){

  gl <- lapply(labels, textGrob, ...)

  if(is.null(heights))
    heights <- do.call(unit.c, lapply(gl, grobHeight)) + margin

  widths <- do.call(max, lapply(gl, grobWidth))
  gt <- gtable_matrix("table", grobs = matrix(gl,ncol=1), 
                      widths=widths, heights=heights)
  grid.draw(gt)
}

grid.newpage()
grid.expr(LETTERS[1:5], heights=unit(1:5,"line"))