2012-08-02 17 views
27

Ho recentemente iniziato a utilizzare la funzione grid.table dal pacchetto gridExtra per trasformare i dati tabulari in file di immagine png da utilizzare sul Web. Sono stato molto soddisfatto fin da quando ha prodotto un output molto bello per impostazione predefinita, un po 'come un ggplot2 per le tabelle. Come la persona che mi piace questa domanda, mi piacerebbe vedere la possibilità di specificare la giustificazione per le singole colonne, ma sarebbe una ciliegina sulla torta già più sofisticata.Aggiunta di testo a una trama grid.table

La mia domanda è se sia possibile aggiungere del testo intorno a un grid.table in modo che io possa dare alle tabelle tracciate un titolo e una nota a piè di pagina. Mi sembra che questo dovrebbe essere fattibile, ma non ne so abbastanza sulla grafica della griglia per essere in grado di capire come aggiungere grobs al tavolo grob. Ad esempio, questo codice:

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 questa trama:

enter image description here

quando mi piacerebbe davvero essere in grado di fare qualcosa di simile al seguente nel codice, piuttosto che modificando l'immagine con un'altra applicazione:

enter image description here

risposta

41

per inserire il testo vicino al tavolo si vorrà valutare la scheda Le dimensioni prima,

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, questo approccio non è più adatto. tableGrob ora restituisce un Gtable, che può essere più facilmente personalizzato.

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

Grazie, che risolve il problema e ho imparato molte cose da questo. Immagino di poter usare anche la tabella e le scanalature di testo nelle finestre e così via? – SlowLearner

+0

sicuro, puoi dare un vp al gTree – baptiste

+0

funziona, ma il colore della tabella è sparito dopo averlo usato. Posso solo colorare il titolo. – lulumink

2

Se volete appena il titolo (non nota), qui è una versione semplificata di @ Baptiste esempio:

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) 
Problemi correlati