2012-08-02 26 views
27

Recientemente comencé a usar la función grid.table del paquete gridExtra para convertir los 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 asked esta pregunta me gustaría ver la capacidad de especificar la justificación de las columnas individuales, pero eso sería guinda de lo que es un pastel ya más ish.Agregar texto a un gráfico grid.table

Mi pregunta es si es posible agregar texto alrededor de grid.table para que pueda dar un título y una nota al pie de página. 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 trama:

enter image description here

cuando realmente me gustaría ser capaz de hacer algo como lo siguiente en código en lugar de mediante la edición de la imagen con otro aplicación:

enter image description here

Respuesta

41

para colocar texto cerca de la mesa usted querrá evaluar la pestaña primero le tamaño,

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) 

Edit (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) 
+0

Gracias, que resuelve el problema y he aprendido varias cosas de eso. ¿Supongo que también puedo usar la tabla y los campos de texto en las ventanas gráficas y demás? – SlowLearner

+0

seguro, puede dar un vp al gTree – baptiste

+0

funciona, pero el color de la tabla se ha ido después de usar esto. Solo puedo colorear al título. – lulumink

2

Si desea simplemente el título (sin nota), aquí es una versión simplificada del ejemplo @ 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) 
Cuestiones relacionadas