Удалить пробел textGrob из grid.arrange

Я новичок в grobbing, и я пытаюсь создать простой объект grid.arrange, но не могу понять, как сделать компактный/узкий макет.

Ниже приведен простой пример того, что я пытаюсь запустить, и гроб, который я получаю.

library(grid)
library(gridExtra)
name = textGrob("My Name", gp=gpar(fontsize = 20, fontface = "bold"))
name2 = textGrob("Second Name", gp=gpar(fontsize = 16))
tbl = tableGrob(head(iris))
grid.arrange(name, name2, tbl)

Вывод того, что я вижу при запуске кода

ОБНОВЛЕНИЕ: Использование найденного ответа здесь Мне удалось сделать текст компактным, но я все еще пытаюсь сделать так, чтобы таблица располагалась прямо под текстом.

library(grid)
library(gridExtra)
name = textGrob("My Name", gp=gpar(fontsize = 20, fontface = "bold"))
name2 = textGrob("Second Name", gp=gpar(fontsize = 16))
tbl = tableGrob(head(iris))
margin = unit(0.5, "line")
grid.newpage()
grid.arrange(name, name2, tbl, 
             heights = unit.c(grobHeight(name) + 1.2*margin, 
                              grobHeight(name2) + margin, 
                              unit(1,"null")))

person spoonertaylor    schedule 17.10.2019    source источник


Ответы (1)


Обычно вы используете аргумент top= для одного гроба. С двумя подобными гробами проще всего объединить их в таблицу; главное препятствие заключается в том, что gtable не учитывает обоснование, поэтому вам нужно настроить позиции самостоятельно,

library(gtable)
justify <- function(x, hjust="center", vjust="top", draw=FALSE){
  w <- sum(x$widths)
  h <- sum(x$heights)
  xj <- switch(hjust,
               center = 0.5,
               left = 0.5*w,
               right=unit(1,"npc") - 0.5*w)
  yj <- switch(vjust,
               center = 0.5,
               bottom = 0.5*h,
               top=unit(1,"npc") - 0.5*h)
  x$vp <- viewport(x=xj, y=yj)
  if(draw) grid.draw(x)
  return(x)
}
title <- gtable_col('title', grobs = list(name,name2), 
                    heights = unit.c(grobHeight(name) + 1.2*margin, 
                                   grobHeight(name2) + margin))

grid.newpage()
grid.arrange(justify(title, vjust='bottom'), justify(tbl))
person user12235176    schedule 17.10.2019