Добавление текста субтитров к графику grid.table

У меня есть вопрос, очень похожий на то, что обсуждалось здесь: Добавление текста в таблицу grid.table сюжет моя конечная цель, однако, состоит в том, чтобы заголовок находился на расстоянии 60 мм от верхней части таблицы, а подзаголовок — на 2 мм ниже заголовка. Я придумал этот код, который почти есть, но не там, то есть подзаголовок находится на 2 мм от верхней части таблицы и на 2 мм ниже заголовка, как и ожидалось.

library(gridExtra)
  library(grid)
  library(gtable)
  d <- head(iris)
  table <- tableGrob(d)
  
  title <- textGrob("Title",gp=gpar(fontsize=50))
  subtitle <- textGrob("subtitle", x=0, hjust=0,
                       gp=gpar( fontface="italic"))
  
  padding <- unit(2,"mm")
  
  table <- gtable_add_rows(table, 
                           heights = grobHeight(subtitle)+ padding,
                           pos = 0)
  
  padding <- unit(60,"mm")
  table <- gtable_add_rows(table, 
                           heights = grobHeight(title) + padding,
                           pos = 0)
  
  table <- gtable_add_grob(table, list(title, subtitle),
                           t=c(1, 2), l=c(1,1), 
                           r=ncol(table))
  png('tmp.png', width = 480, height = 480, bg = "#FFECDB")
  grid.newpage()
  grid.draw(table)
  dev.off()

Интересно, есть ли у кого-нибудь предложение о том, как это исправить. Спасибо


person Angelo    schedule 12.07.2021    source источник


Ответы (1)


Я новичок в таблицах сетки, но, похоже, порядок ваших grobs имеет значение, по крайней мере, для заполнения. Это тот результат, которого вы ожидаете?

library(gridExtra)
library(grid)
library(gtable)

d <- head(iris)
table <- tableGrob(d)

title <- textGrob("Title", gp = gpar(fontsize=50))
subtitle <- textGrob("subtitle", x=0, hjust=0, gp=gpar( fontface="italic"))

table <- gtable_add_rows(table, heights = grobHeight(subtitle) + unit(58,"mm"), pos = 0)
table <- gtable_add_rows(table, heights = grobHeight(title) - unit(60,"mm"), pos = 0)
table <- gtable_add_grob(table, list(title, subtitle), t=c(1,2), l=c(1,1), r=ncol(table))

png('tmp.png', width = 480, height = 480, bg = "#FFECDB")

grid.newpage()
grid.draw(table)

dev.off()

заголовок подзаголовок 60

person Skaqqs    schedule 14.07.2021
comment
Это именно то, чего я пытался достичь. Большое спасибо! - person Angelo; 14.07.2021
comment
Здорово! Удачи! - person Skaqqs; 14.07.2021