Agregar texto a un gráfico grid.table

Recientemente comencé a usar la función gridExtra paquete gridExtra para convertir datos tabulares en archivos de imagen png para su uso en la web. Me ha encantado, en la medida en que produce resultados muy atractivos por defecto, algo así como un ggplot2 para tablas. Al igual que la persona que hizo esta pregunta, me encantaría ver la posibilidad de especificar la justificación para las columnas individuales, pero eso sería guinda de lo que ya es un pastel más.

Mi pregunta es si es posible agregar texto alrededor de una grid.table para que pueda dar un título y una nota al pie a las tablas trazadas. Me parece que esto debería ser factible, pero no sé lo suficiente sobre los gráficos de cuadrícula para poder descifrar cómo agregar grobs a la tabla grob. Por ejemplo, este código:

 require(gridExtra) mydf <- data.frame(Item = c('Item 1','Item 2','Item 3'),                    Value = c(10,15,20), check.names = FALSE) grid.table(mydf, gpar.coretext=gpar(fontsize = 16), gpar.coltext = gpar(fontsize = 16), gpar.rowtext = gpar(fontsize = 16), gpar.corefill = gpar(fill = "blue", alpha = 0.5, col = NA), h.even.alpha = 0.5, equal.width = FALSE, show.rownames = FALSE, show.vlines = TRUE, padding.h = unit(15, "mm"), padding.v = unit(8, "mm") ) 

genera esta ttwig:

enter image description here

cuando realmente me gustaría poder hacer algo como lo siguiente en el código en lugar de editar la imagen con otra aplicación:

enter image description here

Para colocar el texto cerca de la mesa, primero querrá evaluar el tamaño de la tabla,

 library(gridExtra) d <- head(iris) table <- tableGrob(d) grid.newpage() h <- grobHeight(table) w <- grobWidth(table) title <- textGrob("Title", y=unit(0.5,"npc") + 0.5*h, vjust=0, gp=gpar(fontsize=20)) footnote <- textGrob("footnote", x=unit(0.5,"npc") - 0.5*w, y=unit(0.5,"npc") - 0.5*h, vjust=1, hjust=0,gp=gpar( fontface="italic")) gt <- gTree(children=gList(table, title, footnote)) grid.draw(gt) 

Editar (17/07/2015) Con gridExtra> = 2.0.0, este enfoque ya no es adecuado. tableGrob ahora devuelve un tabla, que se puede personalizar más fácilmente.

 library(gridExtra) d <- head(iris) table <- tableGrob(d) library(grid) library(gtable) title <- textGrob("Title",gp=gpar(fontsize=50)) footnote <- textGrob("footnote", x=0, hjust=0, gp=gpar( fontface="italic")) padding <- unit(0.5,"line") table <- gtable_add_rows(table, heights = grobHeight(title) + padding, pos = 0) table <- gtable_add_rows(table, heights = grobHeight(footnote)+ padding) table <- gtable_add_grob(table, list(title, footnote), t=c(1, nrow(table)), l=c(1,2), r=ncol(table)) grid.newpage() grid.draw(table) 

Si solo desea el título (sin nota al pie), aquí hay una versión simplificada del ejemplo de @ baptiste:

 title <- textGrob("Title", gp = gpar(fontsize = 50)) padding <- unit(0.5,"line") table <- gtable_add_rows( table, heights = grobHeight(title) + padding, pos = 0 ) table <- gtable_add_grob( table, list(title), t = 1, l = 1, r = ncol(table) ) grid.newpage() grid.draw(table)